ASM网关提供HTTPS安全支持、证书动态加载,从而提升ASM网关安全性。除了在ASM网关侧绑定证书的方式之外, 还可以在负载均衡侧管理证书。
本文介绍如何支持ASM网关服务在负载均衡侧绑定证书, 并创建HTTPS类型的监听。
前提条件
- 已创建ASM实例。具体操作,请参见创建ASM实例。
- 已创建ACK集群。具体操作,请参见创建Kubernetes托管版集群。
- 添加集群到ASM实例。具体操作,请参见添加集群到ASM实例。
背景信息
如何为K8s Service创建HTTPS类型的监听
需要先在阿里云控制台上创建一个证书并记录cert-id,然后使用如下Annotation创建一个HTTPS类型的SLB。
说明: HTTPS请求会在SLB层解密,然后以HTTP请求的形式发送给后端的Pod。
apiVersion v1 kind Service metadata annotations service.beta.kubernetes.io/alibaba-cloud-loadbalancer-protocol-port"https:443" service.beta.kubernetes.io/alibaba-cloud-loadbalancer-cert-id"${YOUR_CERT_ID}" name sample namespace default spec portsport443 protocol TCP targetPort80 selector app sample type LoadBalancer
具体参考文档: https://help.aliyun.com/document_detail/86531.html
步骤一:准备SLB需要的证书
本示例中为aliyun.com生成证书和私钥。
如果您已经拥有针对aliyun.com可用的证书和私钥,需要将密钥命名为aliyun.com.key,证书命名为aliyun.com.crt。如果没有,可以通过openssl执行以下步骤来生成证书和密钥。
1.执行以下命令,创建根证书和私钥。
openssl req -x509-sha256-nodes-days365-newkey rsa:2048 -subj'/O=myexample Inc./CN=aliyun.com'-keyout aliyun.root.key -out aliyun.root.crt
2.执行以下命令,为aliyun.com服务器生成证书和私钥。
openssl req -out aliyun.com.csr -newkey rsa:2048 -nodes-keyout aliyun.com.key -subj"/CN=aliyun.com/O=myexample organization"openssl x509 -req-days365-CA aliyun.root.crt -CAkey aliyun.root.key -set_serial0-in aliyun.com.csr -out aliyun.com.crt
3.在SLB控制台中创建证书
配置HTTPS监听,您可以直接使用SSL证书服务中的证书或者将所需的第三方签发的服务器证书和CA证书上传到传统型负载均衡中。
具体参考: https://help.aliyun.com/document_detail/129370.html
步骤二:创建HTTPS类型的监听
阿里云ASM提供了自定义入口网关服务的功能, 可以通过YAML配置方式定义特定的功能参数。具体可以参考: https://help.aliyun.com/document_detail/165004.html
如下配置中, 通过serviceAnnotation将创建一个HTTPS类型的SLB, 以443为端口的HTTPS请求会在SLB层解密,然后以HTTP请求的形式发送给后端的Pod的端口80。
apiVersion istio.alibabacloud.com/v1beta1 kind IstioGateway metadata name ingressgateway namespace istio-system spec .... portsname http-0 port80 protocol HTTP targetPort80name https-1 port443 protocol HTTPS targetPort80 .... serviceAnnotations service.beta.kubernetes.io/alibaba-cloud-loadbalancer-cert-id"${YOUR_CERT_ID}" service.beta.kubernetes.io/alibaba-cloud-loadbalancer-protocol-port'https:443' .... serviceType LoadBalancer
执行结果
通过ASM控制台查看,在控制台选中对应的服务网格实例,左侧导航栏选中ASM网关, 在右侧页面中查看对应的信息。
执行以下命令,通过HTTPS协议访问httpbin服务。
curl -k https:// 替换成真实的入口网关IP地址 :443/headers "headers" "Accept""*/*" "Host""xxxx" "Remoteip""xxxx" "User-Agent""curl/7.79.1" "X-Envoy-Attempt-Count""1" "X-Envoy-External-Address""xxxx" "X-Forwarded-Client-Cert""By=spiffe://cluster.local/ns/default/sa/httpbin;Hash=9dd4266bc514d03aae50e174ace52eff7e577d79a14795b532be876139e8922f;Subject=\"\";URI=spiffe://cluster.local/ns/istio-system/sa/istio-ingressgateway-service-account"