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在整個網格中的使用情況:
idou老師教你學Istio 09: 如何用Istio實現K8S Ingress流量管理

如何配置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了。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章