網(wǎng)關(guān)規(guī)則(Gateway)CRD說明
網(wǎng)關(guān)規(guī)則定義一組邏輯網(wǎng)關(guān),包括公開的端口、使用的協(xié)議類型、負載均衡器的SNI配置等,需要應(yīng)用在ASM網(wǎng)關(guān)上才能實現(xiàn)真正的服務(wù)監(jiān)聽。網(wǎng)關(guān)規(guī)則只用于配置監(jiān)聽,您還需配置一個虛擬服務(wù)來指明流量轉(zhuǎn)發(fā)規(guī)則。本文介紹網(wǎng)關(guān)規(guī)則CRD的配置示例和字段說明。
配置示例
以下網(wǎng)關(guān)規(guī)則配置定義如何在網(wǎng)關(guān)上暴露80、9080、443和9443端口。該規(guī)則將會應(yīng)用到攜帶istio: ingressgateway
標(biāo)簽的Pod上。
apiVersion: networking.istio.io/v1alpha3
kind: Gateway
metadata:
name: my-gateway
namespace: some-config-namespace
spec:
selector:
istio: ingressgateway
servers:
- port:
number: 80
name: http
protocol: HTTP
hosts:
- test1.com
- test2.com
tls:
httpsRedirect: true
- port:
number: 443
name: https-443
protocol: HTTPS
hosts:
- uk.bookinfo.com
- eu.bookinfo.com
tls:
mode: SIMPLE
serverCertificate: /etc/certs/servercert.pem
privateKey: /etc/certs/privatekey.pem
- port:
number: 9443
name: https-9443
protocol: HTTPS
hosts:
- "bookinfo-namespace/*.bookinfo.com"
tls:
mode: SIMPLE
credentialName: bookinfo-secret
- port:
number: 9080
name: http-wildcard
protocol: HTTP
hosts:
- "*"
字段說明
Gateway
字段 | 類型 | 是否必選 | 說明 |
servers | 是 | 邏輯網(wǎng)關(guān)列表。 | |
selector | map<string, string> | 是 | 一個或多個標(biāo)簽,可指定應(yīng)用該網(wǎng)關(guān)規(guī)則的一組特定ASM網(wǎng)關(guān)的Pod。默認情況下,網(wǎng)關(guān)規(guī)則會根據(jù)標(biāo)簽選擇器在所有命名空間中搜索工作負載。例如,foo命名空間中的網(wǎng)關(guān)規(guī)則可以根據(jù)標(biāo)簽選擇bar命名空間中的Pod。如果選擇器為空,網(wǎng)關(guān)規(guī)則將應(yīng)用于所有工作負載。 |
Server
Server描述給定負載均衡器端口上代理的屬性。
字段 | 類型 | 是否必選 | 說明 |
port | Port | 是 | Server監(jiān)聽的端口。 |
bind | string | 否 | 偵聽器應(yīng)綁定的IP或Unix域套接字。格式為 使用Unix域套接字時,端口號應(yīng)為0。該配置可用于將此服務(wù)器的可達性限制為僅網(wǎng)關(guān)內(nèi)部,常用于網(wǎng)關(guān)與另一個網(wǎng)格服務(wù)通信,例如發(fā)布指標(biāo)。該場景下,外部客戶端不能訪問使用指定Bind創(chuàng)建的服務(wù)器。 |
hosts | string[] | 是 | 公開的一臺或多臺主機,可用于HTTP服務(wù)或帶SNI的TLS的TCP服務(wù)。 該字段可以包含多個DNS名稱,并且可以帶有可選Namespace或前綴。DNS名稱使用FQDN格式指定,可選擇在最左側(cè)包含通配符(例如 命名空間可以被設(shè)置為 網(wǎng)關(guān)規(guī)則必須有對應(yīng)的虛擬服務(wù),并且虛擬服務(wù)必須具有一個或多個與服務(wù)器中指定的主機相匹配的Host。匹配可以是與服務(wù)器主機的完全匹配或后綴匹配。例如,如果服務(wù)器的主機指定 說明 該字段只能引用導(dǎo)出到網(wǎng)關(guān)命名空間的虛擬服務(wù)。如果沒有導(dǎo)出到網(wǎng)關(guān)命名空間,則此處配置無效。服務(wù)導(dǎo)出范圍由exportTo字段控制。更多信息,請參見Virtual Service、Destination Rule和Service Entry的配置。 |
tls | 否 | 一組管理服務(wù)器TLS相關(guān)選項,例如控制是否將HTTP請求重定向到HTTPS、指定使用的TLS模式等。 | |
name | string | 否 | 服務(wù)器的可選名稱,需在所有服務(wù)器中保持唯一,可用于為使用此名稱生成的統(tǒng)計數(shù)據(jù)添加前綴等。 |
Port
Port描述服務(wù)的特定端口的屬性。
字段 | 類型 | 是否必選 | 說明 |
number | uint32 | 是 | 一個有效的非負整數(shù)端口號。 |
protocol | string | 是 | 在端口上公開的協(xié)議,取值為HTTP、HTTPS、GRPC、HTTP2、TCP或TLS。TLS可用于終止特定端口上基于非HTTP的連接,或基于SNI標(biāo)頭將流量路由到目的地而不終止TLS連接。 |
name | string | 是 | 分配給端口的標(biāo)簽。 |
ServerTLSSettings
字段 | 類型 | 是否必選 | 說明 |
httpsRedirect | bool | 否 | 設(shè)置為true,表示負載均衡器將為所有HTTP連接發(fā)送301重定向,要求客戶端使用HTTPS。 |
mode | 否 | 是否使用TLS來保護與此端口的連接。該字段的值決定了連接使用的TLS模式。 | |
serverCertificate | string | 否 | 指定服務(wù)器側(cè)存儲證書的文件路徑。如果TLS模式為SIMPLE或MUTUAL,需要填寫該字段。 說明 建議使用credentialName字段配置。 |
privateKey | string | 否 | 指定服務(wù)器側(cè)存儲私鑰的文件路徑。如果模式為SIMPLE或MUTUAL,需要填寫該字段。 說明 建議使用credentialName字段配置。 |
caCertificates | string | 否 | 指定用于驗證提供的客戶端證書的證書頒發(fā)機構(gòu)證書的文件的路徑。如果模式為MUTUAL,需要填寫該字段。 說明 建議使用credentialName字段配置。 |
credentialName | string | 否 | 對于在Kubernetes上運行的網(wǎng)關(guān),此處可以直接配置Secret名稱(Secret中需要保存TLS證書或CA證書)。僅適用于Kubernetes。 Secret(Generic類型)應(yīng)包含以下鍵和值:
對于mTLS還可以設(shè)置 同時支持TLS類型的Secret,您可以在Secret中配置ca.cert字段來指定CA證書。 說明
|
subjectAltNames | string[] | 否 | 用于驗證客戶端提供的證書中的主體身份的備用名稱列表。 |
verifyCertificateSpki | string[] | 否 | 授權(quán)客戶端證書SPKI的SHA-256哈希的可選列表,需要使用Base64編碼。 說明 當(dāng)同時指定verify_certificate_hash和verify_certificate_spki時,匹配任一值的散列將導(dǎo)致證書被接受。 |
verifyCertificateHash | string[] | 否 | 授權(quán)客戶端證書的SHA-256哈希的可選列表,需要使用十六進制編碼。支持不分隔或半角冒號(:)分隔格式。 說明 當(dāng)同時指定verify_certificate_hash和verify_certificate_spki時,匹配任一值的散列將導(dǎo)致證書被接受。 |
minProtocolVersion | 否 | 最低TLS協(xié)議版本。默認為TLSV1_2。 低于TLSV1_2的TLS協(xié)議版本不包含兼容的密碼,您可以使用cipherSuites設(shè)置兼容的密碼。 重要 使用低于TLSV1_2的TLS協(xié)議版本存在嚴(yán)重的安全風(fēng)險,建議您使用更高版本。 ASM實例版本為1.14以下,該字段默認為TLSV1_0。從ASM 1.14版本起,默認值變更為TLSV1_2。如果您使用的TLS版本低于TLSV1_2,在升級到1.14版本之前,需要顯式地配置該字段為對應(yīng)的TLS版本,并配置對應(yīng)的cipherSuites字段。 | |
maxProtocolVersion | 否 | 最大TLS協(xié)議版本。 | |
cipherSuites | string[] | 否 | 默認為Envoy支持的默認密碼列表。如果指定,僅支持指定的密碼列表。 |
TLSmode
代理強制執(zhí)行的TLS模式。
字段 | 說明 |
PASSTHROUGH | 客戶端提供的SNI字符串將用作VirtualService TLS路由中的匹配標(biāo)準(zhǔn),以確定來自服務(wù)注冊表的目標(biāo)服務(wù)。 |
SIMPLE | 使用標(biāo)準(zhǔn)TLS語義的安全連接。 |
MUTUAL | 通過提供服務(wù)器證書進行身份驗證,使用雙向TLS保護與下游的連接。 |
AUTO_PASSTHROUGH | 類似于passthrough模式,但是該模式不要求虛擬服務(wù)中必須存在能夠通過SNI路由到指定服務(wù)的配置。服務(wù)、子集、端口等目的地詳細信息編碼在SNI值中。代理將通過SNI將流量轉(zhuǎn)發(fā)給指定的上游(Envoy)集群(一組端點)。此服務(wù)器通常用于在不同的L3網(wǎng)絡(luò)中提供服務(wù)之間的連接,否則這些網(wǎng)絡(luò)在它們各自的端點之間沒有直接連接。使用此模式假定源和目標(biāo)都使用Istio mTLS來保護流量。 |
ISTIO_MUTUAL | 通過提供服務(wù)器證書進行身份驗證,使用雙向TLS保護來自下游的連接。與Mutual模式相比,該模式使用可以代表網(wǎng)關(guān)身份的證書和客戶端通信,該證書由Istio自動生成以進行mTLS身份驗證。使用此模式時,所有其他字段相關(guān)的TLS配置都應(yīng)為空。 |
TLSProtocol
TLS協(xié)議版本。
名稱 | 說明 |
TLS_AUTO | 自動選擇最佳TLS版本。 |
TLSV1_0 | TLS 1.0版本。 |
TLSV1_1 | TLS 1.1版本。 |
TLSV1_2 | TLS 1.2版本。 |
TLSV1_3 | TLS 1.3版本。 |