Kubernates Ingress 配置证书
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Kubernates Ingress 配置证书相关的知识,希望对你有一定的参考价值。
参考技术A 关于双向认证的一些概念可以在这篇文章中获取 https://www.jianshu.com/p/e1aaa5e9de17在K8S中,密钥的管理是通过创建Secret方式进行的,我们生成一对公私钥,并且公钥已经通过CA签发一张证书之后,就可以导入到K8S的Secret了。通常,我们会有下面三个文件:
nginx Ingress Controller 文档中提供了两种方式的公私钥导入
这是第一种导入方式,其实跟我们在Nginx中配置证书并无太大差异,单独导入ca.pem作为一个secret,然后打包cert.pem和key.pem作为一个secret,命令如下:
第二种方式则是将证书,证书链和私钥全部打包在一块,参考命令如下,
创建完毕之后我们看一下我们创建好的Secret:
创建完Secret之后就可以配置Ingress了。根据官方的样例,我们调整参数,如下:
配置完之后我们可以进入nginx-ingress-controller容器,在nginx.conf文件下看到这样三个配置,ingress自动帮我们配置好了nginx:
这样子直接就可以使用HTTPs访问了,Ingress会校验证书的合法性。
我们使用的是自签名证书给客户端签发客户端证书,在客户端带上证书访问的时候,出现了400 Bad Certificate错误,如果确认应用层证书配置和信任链配置无误的情况下,可以检查下这个配置
我们使用的自签名证书链有4层,然后我将nginx.ingress.kubernetes.io/auth-tls-verify-depth校验链层数改为4,问题解决了。
为啥我的 kubernetes 证书仍然在浏览器中显示 DNS Name=ingress.local?
【中文标题】为啥我的 kubernetes 证书仍然在浏览器中显示 DNS Name=ingress.local?【英文标题】:why does my kubernetes certificate still show DNS Name=ingress.local in the browser?为什么我的 kubernetes 证书仍然在浏览器中显示 DNS Name=ingress.local? 【发布时间】:2021-12-20 23:04:59 【问题描述】:我正在使用 helm 安装 gitlab,我已经使用以下命令在 kubernetes 中创建了证书。
但是,当我运行 helm install 并在浏览器中输入地址 (ip-address.nip.io) 时,我仍然收到“您的连接不是私人的”消息。我已将证书安装到我的受信任的根证书颁发机构。
当我从浏览器检查证书详细信息时,我发现它仍然显示 Subject Alternative Name -> DNS Name=ingress.local
我无法从浏览器获取我的 ip-address.nip.io 端点,这就是目标。
K8s 证书
cat <<EOF | cfssl genkey - | cfssljson -bare server
"hosts": [
"<ip-address>.nip.io",
"registry.<ip-address>.nip.io",
"gitlab.<ip-address>.nip.io",
"minio.<ip-address>.nip.io"
],
"CN": "<ip-address>.nip.io",
"key":
"algo": "rsa",
"size": 2048
EOF
cat <<EOF | kubectl apply -f -
apiVersion: certificates.k8s.io/v1beta1
kind: CertificateSigningRequest
metadata:
name: <ip-address>.nip.io
spec:
request: $(cat server.csr | base64 | tr -d '\n')
usages:
- digital signature
- key encipherment
- server auth
EOF
kubectl certificate approve <ip-address>.nip.io
kubectl get csr <ip-address>.nip.io -o jsonpath='.status.certificate' | base64 --decode > server.crt
kubectl create secret tls <secret-name> --key server-key.pem --cert server.crt
【问题讨论】:
I have created the certificate in kubernetes with the below commands
...您忘记包含命令了。
如果它解决了您的问题,请考虑接受答案。***.com/help/accepted-answer
【参考方案1】:
检查您的入口 hosts 配置和 secrets 是否正确设置
spec:
tls:
- secretName: cert-secret
hosts:
- app.dev.example.com <---- this entry should match below
- secretName: dev-wildcard-tls-cert
hosts:
- "*.app.example.com" <---- this entry should match below
rules:
- host: app.dev.example.com <---- this entry should match
http:
paths:
- path: /
backend:
serviceName: service-2
servicePort: 80
- host: "*.app.example.com" <---- this entry should match
http:
paths:
- path: /
backend:
serviceName: service-1
servicePort: 80
【讨论】:
以上是关于Kubernates Ingress 配置证书的主要内容,如果未能解决你的问题,请参考以下文章