我正在尝试为部署到k8s集群(在docker-for-win、WSL2上运行的Windows 10 20H2)的应用程序排序证书。
我想使用DNS连接服务,例如 registry.default.svc.cluster.local
,我已经验证它是可达的。我按照以下步骤创建了一个证书:
- 创建一个包含内容的
openssl.conf
[ req ]
default_bits = 2048
prompt = no
encrypt_key = no
distinguished_name = req_dn
req_extensions = req_ext
[ req_dn ]
CN = *.default.svc.cluster.local
[ req_ext ]
subjectAltName = @alt_names
[ alt_names ]
DNS.1 = *.default.svc.cluster.local
- 使用
openssl req -new -config openssl.conf -out wildcard.csr -keyout wildcard.key
创建CSR和密钥文件。 - 创建证书签名请求。
cat <<EOF | kubectl create -f -
apiVersion: certificates.k8s.io/v1beta1
kind: CertificateSigningRequest
metadata:
name: wildcard_csr
spec:
groups:
- system:authenticated
request: $(cat wildcard.csr | base64 | tr -d '\n')
usages:
- digital signature
- key encipherment
- server auth
EOF
- 批准请求:
kubectl certificate approve wildcard_csr
- 提取crt文件:
kubectl get csr wildcard_csr -o jsonpath='{.status.certificate}' | base64 -d > wildcard.crt
- 删除请求:
kubectl delete csr wildcard_csr
.
然后我启动了一个使用registry:2
镜像的pod,并配置它使用wildcard.crt
和wildcard.key
文件。
在另一个pod中,我尝试推送到该注册表,但遇到了错误
Error response from daemon: Get https://registry.default.svc.cluster.local:2100/v2/: x509: certificate signed by unknown authority
所以看起来在pod内,k8s CA是不受信任的。我的观察是否正确?如果是这样,我该如何使k8s相信自己(毕竟,签署证书的是k8s组件)?
/var/run/secrets/kubernetes.io/serviceaccount/ca.crt
。尝试使用它来验证注册表,如果可以的话,请告诉我。 - Matt/etc/ssl/certs/
目录下,并运行update-ca-certificates
命令。 - Matt