Istio 的 DNS 证书管理
此文档主要说明如何使用 Chiron 配置和管理 DNS 证书。 Chiron 是一个与 Istiod 相连的轻量型组件,使用 Kubernetes 的 CA API 签发证书,无需管理私钥。优势如下:
与 Istiod 不同, 这种方式无需维护签发的私钥,增强了安全性。
简化了将根证书分发到 TLS 客户端。客户端不再需要等待 Istiod 生成和分发其 CA 证书。
开始之前
- 通过
istioctl
安装 Istio,并配置 DNS 证书。当 Istio 启动后会读取该配置。
$ cat <<EOF > ./istio.yaml
apiVersion: install.istio.io/v1alpha1
kind: IstioOperator
spec:
meshConfig:
certificates:
- secretName: dns.example1-service-account
dnsNames: [example1.istio-system.svc, example1.istio-system]
- secretName: dns.example2-service-account
dnsNames: [example2.istio-system.svc, example2.istio-system]
EOF
$ istioctl install -f ./istio.yaml
DNS 证书的提供和管理
Istio 根据用户的配置,为 DNS 证书提供 DNS 名称和 Secret 名称。DNS 证书 通过 Kubernetes CA 签发,并根据配置保存到 Secret 中。Istio 也管理 DNS 证书的生命周期,包括证书的滚动和重新生成。
配置 DNS 证书
在 istioctl install
命令中使用 IstioOperator
自定义资源用于配置Istio。IstioOperator
自定义资源包括 DNS 证书配置的例子。其中,dnsNames
字段定义证书中 DNS 名称,secretName
字段定义用于存储证书和私钥的 Kubernetes Secret 名称。
检查 DNS 证书的提供
在配置 Istio 生成 DNS 证书和保存证书到 Secret 后,您可以校验证书是够已经生成并正常运行。
为了校验例子中 Istio 的配置 dns.example1-service-account
生成的 DNS 证书,和校验证书是否包含 配置的 DNS 名称,需要获取 Kubernetes 的 Secret 进行解析解码,通过以下命令查看具体内容:
$ kubectl get secret dns.example1-service-account -n istio-system -o jsonpath="{.data['cert-chain\.pem']}" | base64 --decode | openssl x509 -in /dev/stdin -text -noout
输出内容包括:
X509v3 Subject Alternative Name:
DNS:example1.istio-system.svc, DNS:example1.istio-system
重新生成 DNS 证书
Istio 还可以在重新生成被误删的 DNS 证书。接下来,将会演示如何删除最近配置的证书,并校验 Istio 自动重新生成证书。
删除前面保存的配置 DNS 证书的 Secret:
$ kubectl delete secret dns.example1-service-account -n istio-system
校验 Istio 重新生成已删除 DNS 证书,且证书包含配置的 DNS 名称,您需要获取 Kubernetes 的 Secret进行解析解码,通过以下命令查看详细内容:
$ sleep 10; kubectl get secret dns.example1-service-account -n istio-system -o jsonpath="{.data['cert-chain\.pem']}" | base64 --decode | openssl x509 -in /dev/stdin -text -noout
输出内容包括:
X509v3 Subject Alternative Name:
DNS:example1.istio-system.svc, DNS:example1.istio-system
清理
移除
istio-system
Namespace:$ kubectl delete ns istio-system