Istio Gateway網關


Istio Ingress Gateway

istio-gateways
Istio 服務網格中的網關

使用網關為網格來管理入站和出站流量,可以讓用戶指定要進入或離開網格的流量。

使用網關為網格來管理入站和出站流量,可以讓用戶指定要進入或離開網格的流量。

網關配置被用於運行在網格內獨立 Envoy 代理中,而不是服務工作負載的應用 Sidecar 代理。

Gateway 用於為 HTTP / TCP 流量配置負載均衡器,並不管該負載均衡器將在哪里運行。網格中可以存在任意數量的 Gateway,並且多個不同的 Gateway 實現可以共存。實際上,通過在配置中指定一組工作負載(Pod)標簽,可以將 Gateway 配置綁定到特定的工作負載,從而允許用戶通過編寫簡單的 Gateway Controller 來重用現成的網絡設備。

Gateway 只用於配置 L4-L6 功能(例如,對外公開的端口,TLS 配置),所有主流的 L7 代理均以統一的方式實現了這些功能。然后,通過在 Gateway 上綁定 VirtualService 的方式,可以使用標准的 Istio 規則來控制進入 Gateway 的 HTTP 和 TCP 流量。

例如,下面這個簡單的 Gateway 配置了一個 Load Balancer,以允許訪問 host bookinfo.com 的 https 外部流量進入網格中:

apiVersion: networking.istio.io/v1alpha3
kind: Gateway
metadata:
  name: bookinfo-gateway
spec:
  selector:
    app: my-ingress-gateway
  servers:
  - port:
      number: 443
      name: https
      protocol: HTTPS
    hosts:
    - bookinfo.com
    tls:
      mode: SIMPLE
      serverCertificate: /tmp/tls.crt
      privateKey: /tmp/tls.key

要為進入上面的 Gateway 的流量配置相應的路由,必須為同一個 host 定義一個 VirtualService(在下一節中描述),並使用配置中的 gateways 字段綁定到前面定義的 Gateway 上:

apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
  name: bookinfo
spec:
  hosts:
    - bookinfo.com
  gateways:
  - bookinfo-gateway # <---- bind to gateway
    http:
  - match:
    - uri:
        prefix: /reviews
    route:
    ...

然后就可以為出口流量配置帶有路由規則的虛擬服務。

Gateway 配置信息

Field Type Description Required
servers Server[] 開放的服務列表
selector map 通過這個Label來找到執行 Gateway 規則的 Envoy

Server 配置信息

Field Type Description Required
port Port 服務對外監聽的端口
hosts string[] Gateway 發布的服務地址,是一個 FQDN 域名,可以支持左側通配符來進行模糊查詢
tls TLSOptions TLS安全配置
defaultEndpoint string 默認情況下,應將流量轉發到的環回IP端點或Unix域套接字

Port 配置信息

Field Type Description Required
number uint32 一個有效的端口號
protocol string 所使用的協議,支持HTTP|HTTPS|GRPC|HTTP2|MONGO|TCP|TLS.
name string 給端口分配一個名稱

Server.TLSOptions 配置信息

Field Type Description Required
httpsRedirect bool 是否要做 HTTP 重定向
mode TLSmode 在配置的外部端口上使用 TLS 服務時,可以取 PASSTHROUGH、SIMPLE、MUTUAL、AUTO_PASSTHROUGH 這 4 種模式
serverCertificate string 服務端證書的路徑。當模式是 SIMPLE 和 MUTUAL 時必須指定
privateKey string 服務端密鑰的路徑。當模式是 SIMPLE 和 MUTUAL 時必須指定
caCertificates string CA 證書路徑。當模式是 MUTUAL 時指定
credentialName string 用於唯一標識服務端證書和秘鑰。Gateway 使用 credentialName從遠端的憑證存儲中獲取證書和秘鑰,而不是使用 Mount 的文件
subjectAltNames string[] SAN 列表,SubjectAltName 允許一個證書指定多個域名
verifyCertificateSpki string[] 授權客戶端證書的SKPI的base64編碼的SHA-256哈希值的可選列表
verifyCertificateHash string[] 授權客戶端證書的十六進制編碼SHA-256哈希值的可選列表
minProtocolVersion TLSProtocol TLS 協議的最小版本
maxProtocolVersion TLSProtocol TLS 協議的最大版本
cipherSuites string[] 指定的加密套件,默認使用 Envoy 支持的加密套件

Server.TLSOptions.TLSmode 配置信息

Name Description
PASSTHROUGH 客戶端提供的SNI字符串將用作VirtualService TLS路由中的匹配條件,以根據服務注冊表確定目標服務
SIMPLE 使用標准TLS語義的安全連接
MUTUAL 通過提供服務器證書進行身份驗證,使用雙邊TLS來保護與下游的連接
AUTO_PASSTHROUGH 與直通模式相似,不同之處在於具有此TLS模式的服務器不需要關聯的VirtualService即可從SNI值映射到注冊表中的服務。目標詳細信息(例如服務/子集/端口)被編碼在SNI值中。代理將轉發到SNI值指定的上游(Envoy)群集(一組端點)。
ISTIO_MUTUAL 通過提供用於身份驗證的服務器證書,使用相互TLS使用來自下游的安全連接

Server.TLSOptions.TLSProtocol 配置信息

Name Description
TLS_AUTO 自動選擇DLS版本
TLSV1_0 TLS 1.0
TLSV1_1 TLS 1.1
TLSV1_2 TLS 1.2
TLSV1_3 TLS 1.3

參考文獻

https://preliminary.istio.io/zh/docs/concepts/traffic-management/#gateways

https://preliminary.istio.io/zh//blog/2018/v1alpha3-routing/

https://preliminary.istio.io/zh/docs/reference/config/networking/gateway/#Gateway


免責聲明!

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



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