idou老师教你学Istio 09: 如何用Istio实现K8S Ingress流量管理

举报
云容器大未来 发表于 2019/01/25 10:02:37 2019/01/25
【摘要】 在Istio的世界里,如果想把外部的请求流量引入网格,你需要认识并会学会配置Istio Ingress Gateway。

前言

Istio的世界里,如果想把外部的请求流量引入网格,你需要认识并会学会配置Istio Ingress Gateway



什么是Ingress Gateway



由于Kubernetes  Ingress API只能支持最基本的HTTP路由,使用Kubernetes Ingress资源来配置外部流量的方式不能满足需求。因此Istio v1alpha3 routing API引入新的Istio Ingress Gateway取代Kubernetes  Ingress。

Gateway为HTTP/TCP流量配置了一个负载均衡,用于承载网格边缘的进入和发出连接。在同一个网格中可以有多个不同的gateway存在。这一规范中描述了一系列开放端口,以及这些端口所使用的协议、负载均衡的 SNI 配置等内容。用户可以利用标准的Istio 路由规则控制HTTP和TCP请求进入网格。


从下图可以看到Istio gateway在整个网格中的使用情况:

0125_1.jpg



如何配置Gateway控制Ingress流量



如果你已经安装好了bookinfo的应用,为了能在外部访问bookinfo中的productpage服务,只需要配置Gateway和相关的VirtualService。


用一个简单的gateway配置一个负载均衡使访问bookinfo.com的外部http流量能够进入网格:

apiVersion: networking.istio.io/v1alpha3
kind: Gateway
metadata:
  name: bookinfo-gateway
spec:
  selector:
    istio: ingressgateway
  servers:  
  - hosts:
    - bookinfo.com    
    port:
      number: 80      
      name: http      
      protocol: HTTP

为了配置相应的路由,需要为相同的host定义一个VirtualService 并且用配置中gateways的字段绑定到刚才创建的Gateway:

apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
  name: bookinfo
spec:
  hosts:  
  - bookinfo.com  
  gateways:  
  - bookinfo-gateway # <---- 绑定gateway  
  - mesh # <----对内部通信进行流量控制  
  http:  
  - match:
   - uri:
      exact: /productpage
    route:    
    - destination:
       host: productpage         
       port:         
         number: 9080

这样就达到了在外网开放productpage服务的目的。



如何用HTTPS加密Gateway?



我们也可以为服务启用TLS保护,以HTTPS的形式对网格外提供服务。

首先需要使用工具生成客户端和服务器端的证书和密钥。然后使用密钥和证书作为输入,创建一个Secret。

$ kubectl create -n istio-system secret tls istio
-ingressgateway-certs --key key.pem --cert cert.p
em

接下来修改Gateway对象,为Ingress gateway开放一个443端口,用于提供HTTPS服务:

apiVersion: networking.istio.io/v1alpha3
kind: Gateway
metadata:
 name: bookinfo-gateway
spec:  
  selector: 
   istio: ingressgateway  
  servers:  
  - hosts:    
    - bookinfo.com    
    port:      
      number: 80      
      name: http      
      protocol: HTTP   
    - hosts:   
      - "*"    
      port:      
        number: 443      
        name: https      
        protocol: HTTPS    
      tls:      
        mode: SIMPLE      
        serverCertificate: /etc/istio/ingressgateway-certs/tls.crt      
        privateKey: /etc/istio/ingressgateway-certs/tls.key

这样简单的配置就可以通过HTTPS协议访问bookinfo.com了。


【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。