Azure 中使用 Istio 和证书的 HTTPS:读取 P12 数据时出错:asn1:结构错误:标签不匹配

问题描述 投票:0回答:1

我正在尝试在集群上配置 https 流量。我的证书是使用 Azure 中的“应用服务证书”生成的,该证书已连接到密钥库。

keyvault 作为卷安装在具有入口覆盖的集群中。如果我浏览到入口安装的卷,我可以看到我的证书作为字符串。

但是,istio ingress pod 无法将证书作为秘密挂载。在日志中我可以看到以下错误:

failed to get data in spc istio-system/istio-tls for secret ingress-cert-tls, err: failed to get cert data from file /var/lib/kubelet/pods/f4d74a73-20ee-41f0-9d4c-eaef29ace025/volumes/kubernetes.io~csi/ingressgateway-certs/mount/..data/mysecret 3, err: pkcs12: error reading P12 data: asn1: structure error: tags don't match (16 vs {class:1 tag:13 length:73 isCompound:false}) {optional:false explicit:false application:false private:false defaultValue:<nil> tag:<nil> stringType:0 timeType:0 set:false omitEmpty:false} pfxPdu @2

我做错了什么?

azure kubernetes istio
1个回答
0
投票

所以,经过几个小时的尝试和错误,我终于弄清楚了。该问题是由

App Service Certificate
引起的,它将 keyvault 中的证书导出为
secret
,而不是
certificate

在 github 上,两个团队(负责 App Service 证书和 k8s 的 CSI 驱动程序)只是争论和互相指责,但在过去的两年多里没有人对此采取任何行动。

https://github.com/Azure/secrets-store-csi-driver-provider-azure/issues/273

解决方案是导出密钥,然后将其作为 KV 中的证书重新导入。这意味着您失去了证书轮换的功能,您需要手动重新导入证书。

在azure中,

SecretProviderClass
需要指向您刚刚导入的证书的名称。

© www.soinside.com 2019 - 2024. All rights reserved.