藉助ASM網關,您可以配置帶有mTLS安全機制的gRPC服務,確保僅授權的用戶端能夠訪問,並在整個資料轉送過程中實施端到端加密和雙向身分識別驗證,有效防止資訊被竊聽、篡改及非法訪問。
前提條件
建立ASM企業版執行個體。具體操作,請參見建立ASM執行個體。
已建立Kubernetes託管版叢集。具體操作,請參見建立ACK託管叢集。
已添加叢集到ASM執行個體。具體操作,請參見添加叢集到ASM執行個體。
已部署入口網關服務。具體操作,請參見建立入口網關服務。
已部署應用到ASM執行個體的叢集中。具體操作,請參見在ASM執行個體關聯的叢集中部署應用。
背景資訊
Service MeshASM的流量管理功能支援通過入口網關訪問內部的gRPC服務。由於gRPC基於HTTP/2協議,所以也可以使用TLS/mLTS對傳輸資料進行加密,保障資料安全。ASM網關目前同樣支援TLS/mTLS的gRPC協議,可以將加密的TCP資料流在網關處進行TLS終止,網格內的應用不需要再進行TLS配置。
操作步驟
步驟一:部署樣本應用
登入Container Service管理主控台,在左側導覽列選擇叢集。
在叢集列表頁面,單擊目的地組群名稱,然後在左側導覽列,選擇。
在無狀態頁面頂部,命名空間右側下拉式清單中選擇命名空間,單擊使用YAML建立資源。
在建立頁面,將如下YAML模板粘貼至模板文字框內,單擊建立。
說明由於Istio的協議選擇機制,此處Service配置中的
ports欄位的name必須以http2-或者grpc-開頭,否則Istio無法正確識別服務合約。
步驟二:部署入口網關
本例中使用預設的443連接埠暴露服務。具體操作,請參見建立入口網關。
步驟三:設定Service MeshASM的路由規則
登入ASM控制台,在左側導覽列,選擇。
在網格管理頁面,單擊待配置執行個體的名稱或者操作列中的管理。
建立網關規則。
在網格詳情頁面左側導覽列,選擇。
在網關規則頁面,單擊使用YAML建立。
在建立頁面,請選擇命名空間為default,將如下的YAML粘貼至文字框中,單擊建立。
apiVersion: networking.istio.io/v1beta1 kind: Gateway metadata: name: gw-grpc-443 namespace: default spec: selector: istio: ingressgateway servers: - hosts: - '*' port: name: https number: 443 protocol: HTTPS tls: credentialName: example-credential mode: MUTUAL
建立虛擬服務。
在網格詳情頁面左側導覽列,選擇。
在虛擬服務頁面,單擊使用YAML建立。
在建立頁面,請選擇命名空間為default,將如下的YAML粘貼至文字框中,單擊建立。
apiVersion: networking.istio.io/v1alpha3 kind: VirtualService metadata: name: grpc-vs spec: hosts: - "*" gateways: - gw-grpc-443 http: - match: - port: 443 route: - destination: host: istio-grpc-server
步驟四:掛載認證
gRPC的用戶端通常要求掛載SAN格式的認證。推薦您使用grpc-go樣本的認證組。由於認證需要在ASM網關中使用,所以需要將認證配置在ACK叢集中的istio-system命名空間下。
ASM執行個體為1.17以下
執行以下命令,在istio-system命名空間建立Secret。
kubectl create -n istio-system secret generic example-credential --from-file=tls.key=server_key.pem --from-file=tls.crt=server_cert.pem --from-file=ca.crt=client_ca_cert.pem說明Secret名稱需要和網關規則中配置的credentialName相同。
ASM執行個體為1.17及以上
登入ASM控制台,在左側導覽列,選擇。
在網格管理頁面,單擊目標執行個體名稱,然後在左側導覽列,選擇。
在認證管理頁面,單擊建立,然後在認證資訊面板,配置相關資訊,單擊確定。
步驟五:運行gRPC用戶端
本文使用gRPC-go的官網樣本作為gRPC的Mtls用戶端。
請參照gRPC-go官網樣本安裝gRPC依賴。更多內容,請參見gRPC-go。
請參照gRPC-go官網樣本複製gRPC-go的程式碼程式庫。更多內容,請參見GRPC-go代碼。
使用如下代碼,覆蓋/grpc-go/examples/helloworld/greeter_client/main.go檔案,將
address的值修改為${ASM網關地址}:443。替換完成後,進入examples,執行如下命令。
go run helloworld/greeter_client/main.go預期結果:
Greeting:Hello World若返回結果為如下錯誤,則為認證錯誤,請您參照上述步驟,重新掛載認證。
