idou老師教你學Istio 09: 如何用Istio實現K8S Ingress流量管理


前言

在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了。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM