應用上雲,怎能沒有容器!點擊上方

容器魔方

關注我

前言

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

在整個網格中的使用情況:

如何配置Gateway控制Ingress流量

如果你已經安裝好了bookinfo的應用,為了能在外部訪問bookinfo中的productpage服務,只需要配置Gateway和相關的VirtualService。

用一個簡單的gateway配置一個負載均衡使訪問bookinfo.com的外部http流量能夠進入網格:

  1. apiVersion: networking.istio.io/v1alpha3

  2. kind: Gateway

  3. metadata:

  4.   name: bookinfo-gateway

  5. spec:

  6.   selector:

  7.     istio: ingressgateway

  8.   servers:

  9.   - hosts:

  10.     - bookinfo.com

  11.     port:

  12.       number: 80

  13.       name: http

  14.       protocol: HTTP

     

為了配置相應的路由,需要為相同的host定義一個VirtualService 並且用配置中gateways的欄位綁定到剛才創建的Gateway:

  1. apiVersion: networking.istio.io/v1alpha3

  2. kind: VirtualService

  3. metadata:

  4.   name: bookinfo

  5. spec:

  6.   hosts:

  7.   - bookinfo.com

  8.   gateways:

  9.   - bookinfo-gateway # <---- 綁定gateway

  10.   - mesh # <----對內部通信進行流量控制

  11.   http:

  12.   - match:

  13.     - uri:

  14.         exact: /productpage

  15.     route:

  16.     - destination:

  17.         host: productpage

  18.         port:

  19.           number: 9080

這樣就達到了在外網開放productpage服務的目的。

如何用HTTPS加密Gateway?

我們也可以為服務啟用TLS保護,以HTTPS的形式對網格外提供服務。

首先需要使用工具生成客戶端和伺服器端的證書和密鑰。然後使用密鑰和證書作為輸入,創建一個Secret。

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

接下來修改Gateway對象,為Ingress gateway開放一個443埠,用於提供HTTPS服務:

  1. apiVersion: networking.istio.io/v1alpha3

  2. kind: Gateway

  3. metadata:

  4.   name: bookinfo-gateway

  5. spec:

  6.   selector:

  7.     istio: ingressgateway

  8.   servers:

  9.   - hosts:

  10.     - bookinfo.com

  11.     port:

  12.       number: 80

  13.       name: http

  14.       protocol: HTTP 

  15.   - hosts:

  16.     - "*"

  17.     port:

  18.       number: 443

  19.       name: https

  20.       protocol: HTTPS

  21.     tls:

  22.       mode: SIMPLE

  23.       serverCertificate: /etc/istio/ingressgateway-certs/tls.crt

  24.       privateKey: /etc/istio/ingressgateway-certs/tls.key

     

這樣簡單的配置就可以通過HTTPS協議訪問bookinfo.com了。

推薦閱讀

idou老師教你學Istio 08: 調用鏈埋點是否真的「零修改」?

idou老師教你學Istio 07: 如何用istio實現請求超時管理

idou老師教你學Istio06: 如何用istio實現流量遷移

CKA第二課材料下載請點擊公眾號菜單欄:

CKA培訓—>往期


推薦閱讀:
相关文章