cert-manager是一个证书生命周期管理系统,支持证书的申请、部署等功能。您可以使用cert-manager颁发ASM网关的证书,从而可以使用HTTPS协议通过ASM网关访问服务,保证数据传输的安全。本文介绍如何使用cert-manager管理网关的证书。
背景信息
cert-manager支持签发自签名证书和DNS域名证书,从而可以使用HTTPS协议通过ASM网关访问服务。这两种证书的区别如下:
自签名证书:自签名证书仅具有加密功能,无身份验证功能。您可以在命令行工具中使用HTTPS协议访问ASM网关,但是自签名证书不受Web浏览器的信任,Web浏览器检查HTTPS连接会标记为潜在风险并弹出错误消息,即无法在Web浏览器中使用HTTPS协议通过ASM网关访问服务。
DNS域名证书:DNS域名证书由受信任的CA机构颁发,兼具加密和身份验证功能。相比自签名证书,DNS域名证书具有更高的安全性,受到Web浏览器的信任。您可以同时在命令行工具和Web浏览器中使用HTTPS协议通过ASM网关访问服务。
若您在ASM数据面集群中使用cert-manager时报错,可以加入钉群(钉群号:30421250)进行咨询。
前提条件
在集群中安装cert-manager
在本地安装Helm。具体操作,请参见Helm。
使用kubectl连接集群。具体操作,请参见获取集群KubeConfig并通过kubectl工具连接集群。
执行以下命令,创建cert-manager命名空间。
kubectl create namespace cert-manager
执行以下命令,添加cert-manager Chart。
helm repo add jetstack https://charts.jetstack.io
执行以下命令,获取cert-manager Chart的最新信息。
helm repo update
执行以下命令,安装cert-manager。
说明cert-manager的版本需要和Kubernetes版本保持兼容。关于cert-manager和Kubernetes版本的对应关系,请参见Supported Releases。
helm install \ cert-manager jetstack/cert-manager \ --namespace cert-manager \ --version v1.14 \ --set installCRDs=true
使用cert-manager签发自签名证书
步骤一:在集群中生成自签证书
使用以下内容,创建issuer.yaml。
执行以下命令,创建自签名CA来颁发工作负载证书。
kubectl apply -f issuer.yaml -n istio-system
执行以下命令,查看证书。
kubectl get secret -n istio-system
预期输出:
NAME TYPE DATA AGE istio-ingressgateway-certs kubernetes.io/tls 3 68m
步骤二:验证使用HTTPS协议访问服务是否成功
部署httpbin应用。具体操作,请参见部署httpbin应用。
修改httpbin应用对应的网关规则。
您可以使用ASM的KubeConfig在命令行进行操作,或者登录ASM控制台,在网关规则页面修改YAML。具体操作,请参见管理网关规则。
修改后的YAML示例如下。在443端口增加了HTTPS协议的监听,并且使用了cert-manager创建的证书。
apiVersion: networking.istio.io/v1beta1 kind: Gateway metadata: name: httpbin namespace: default spec: selector: istio: ingressgateway servers: - hosts: - '*' port: name: test number: 80 protocol: HTTP - hosts: - '*' port: name: https number: 443 protocol: HTTPS tls: credentialName: istio-ingressgateway-certs mode: SIMPLE
执行以下命令,在集群中获取入口网关的IP地址。
kubectl get svc -n istio-system -l istio=ingressgateway
执行以下命令,通过HTTPS协议访问httpbin应用。
curl -k --resolve istio-ingressgateway-certs:443:${ASM网关IP} https://istio-ingressgateway-certs/status/418 -I
访问成功后,您可以看到返回了418状态码。此处访问ASM网关使用的域名是
istio-ingressgateway-certs
,这是因为之前创建Certificate时,使用的commonName
为istio-ingressgateway-certs
。