借助ASM网关,您可以配置带有mTLS安全机制的gRPC服务,确保仅授权的客户端能够访问,并在整个数据传输过程中实施端到端加密和双向身份验证,有效防止信息被窃听、篡改及非法访问。
前提条件
创建ASM企业版实例。具体操作,请参见创建ASM实例。
已创建Kubernetes托管版集群。具体操作,请参见创建Kubernetes托管版集群。
已添加集群到ASM实例。具体操作,请参见添加集群到ASM实例。
已部署入口网关服务。具体操作,请参见创建入口网关服务。
已部署应用到ASM实例的集群中。具体操作,请参见在ASM实例关联的集群中部署应用。
背景信息
服务网格ASM的流量管理功能支持通过入口网关访问内部的gRPC服务。由于gRPC基于HTTP/2协议,所以也可以使用TLS/mLTS对传输数据进行加密,保障数据安全。ASM网关目前同样支持TLS/mTLS的gRPC协议,可以将加密的TCP数据流在网关处进行TLS终止,网格内的应用不需要再进行TLS配置。
操作步骤
步骤一:部署示例应用
登录容器服务管理控制台,在左侧导航栏选择集群。
在集群列表页面,单击目标集群名称,然后在左侧导航栏,选择 。
在无状态页面顶部,命名空间右侧下拉列表中选择命名空间,单击使用YAML创建资源。
在创建页面,将如下YAML模板粘贴至模板文本框内,单击创建。
说明由于Istio的协议选择机制,此处Service配置中的
ports
字段的name
必须以http2-
或者grpc-
开头,否则Istio无法正确识别服务协议。
步骤二:部署入口网关
本例中使用默认的443端口暴露服务。具体操作,请参见创建入口网关。
步骤三:设置服务网格ASM的路由规则
登录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客户端。