istio ca控制器
使用Kubernetes CSR的自定义CA集成
使用Kubernetes CA部署Istio
使用Kubernetes CA部署Istio
使用istioctl以下配置在集群上部署Istio
cat <<EOF > ./istio.yaml apiVersion: install.istio.io/v1alpha1 kind: IstioOperator spec: pilot: k8s: env: # Indicate to Istiod that we use an Custom Certificate Authority - name: EXTERNAL_CA value: ISTIOD_RA_KUBERNETES_API # Tells Istiod to use the Kubernetes legacy CA Signer - name: K8S_SIGNER value: kubernetes.io/legacy-unknown EOF istioctl install --set profile=demo -f ./istio.yamlbookinfo在bookinfo名称空间中部署示例应用程序。确保在Istio根目录中执行以下命令
验证安装的证书是否正确
部署工作负载后,以上这些工作负载会将CSR请求发送给Istiod,然后将其转发给Kubernetes CA进行签名。如果一切顺利,则将已签名的证书发送回安装它们的工作负载。要验证它们是否已被Kubernetes CA签名,您需要首先提取签名的证书。
转储在名称空间中运行的所有Pod。
选择任何一个正在运行的吊舱进行下一步。
获取Istio代理用于mTLS的证书链和CA根证书。
proxy_secret json文件在trustedCA字段中包含mTLS的CA根证书。请注意,此证书是base64编码的。
Kubernetes CA使用的证书(特别是kubernetes.io/legacy-unknown签名者)被加载到与bookinfo命名空间中的每个服务帐户关联的机密上。
选择一个与任何服务帐户关联的秘密名称。它们的名称中有一个"令牌"。
在ca.crt输出字段包含base64编码Kubernetes CA证书。
将ca.cert上一步中获得的结果与前一步中的TrustedCA字段内容进行比较。这两个应该是相同的。
(可选)按照bookinfo示例中的其余步骤进行操作,以确保服务之间的通信按预期进行。
使用自定义CA
假设定制CA实现的控制器具有读取和签名Kubernetes CSR请求的必要权限。有关更多详细信息,请参考Kubernetes CSR文档。请注意,以下步骤取决于外部来源,并且可能会更改。
在Kubernetes集群中部署自定义CA控制器
在此示例中,我们使用开源证书颁发机构实现。该代码构建了一个控制器,该控制器读取Kubernetes集群上的CSR资源,并使用本地密钥创建证书。请按照页面上的说明进行操作:
构建证书控制器docker 镜像
将镜像上传到Docker registry
生成Kubernetes manifest以部署它
将上一步中生成的Kubernetes清单部署在signer-ca-system名称空间中的本地集群上。
确保所有服务都在运行。
获取CA的公钥。这被编码在signer-ca-system名称空间中的秘密" signer-ca- *"中。
该tls.crt字段包含base64编码的公共密钥文件。记录下来以备将来使用。
将CA根证书加载到istiod可以访问的secret中
将机密加载到istiod名称空间中。
Istio必须执行此步骤,以验证工作负载证书已由正确的证书颁发机构签名,并将根证书添加到信任捆绑中以使mTLS正常工作。
部署Istio
使用istioctl以下配置在集群上部署Istio 。
bookinfo在bookinfo名称空间中部署示例应用程序。
验证安装的自定义CA证书是否正确
部署工作负载后,以上这些工作负载会将CSR请求发送给Istiod,然后将其转发给Kubernetes CA进行签名。如果一切顺利,则将已签名的证书发送回安装它们的工作负载。为了验证Kubernetes CA确实已对它们进行了签名,您需要首先提取已签名的证书。
转储在名称空间中运行的所有Pod。
选择任何正在运行的吊舱进行下一步。
获取Istio代理用于mTLS的证书链和CA根证书。
该proxy_secretJSON文件包含在MTLS CA根证书trustedCA领域。请注意,此证书是base64编码的。
将以上步骤中获得的CA根证书与external-ca-cert中的" root-cert.pem"值进行比较。这两个应该是相同的。
(可选)按照bookinfo示例中的其余步骤进行操作,以确保服务之间的通信按预期进行。
证书签发原理
判断使用哪种类型的CertificateAuthority
CreateCertificate处理传入的证书签名请求(CSR).它进行身份验证和授权.验证后,签署证书以证明:SAN是身份验证结果中呼叫者的身份.主题公钥是CSR中的公钥.有效期限是请求中的ValidityDuration,如果给定的期限无效,则为默认值.它由CA签名密钥签名。
k8s ra
k8s ra 的sign法法最终调用k8sSign
k8sSign 使用chiron签发证书,发出csrrequest
ca
Sign接受PEM编码的CSR,主题ID和生存期,并返回已签名的证书.如果forCA为true,则签名证书为CA证书,否则为工作负载证书。
Last updated
Was this helpful?