我在通过一组预打包的 Helm Chart 运行应用程序时遇到问题。该图表创建了一个带有秘密的入口。虽然我可以看到入口和秘密成功,并且入口也正确引用了秘密,但当我使用命令调用它时,入口总是返回一个假证书。
openssl s_client -showcerts -servername connectivity-proxy.cs-dev.transparent-proxy.eurekacloud.io -connect connectivity-proxy.cs-dev.transparent-proxy.eurekacloud.io:443
CONNECTED(00000004)
depth=0 O = Acme Co, CN = Kubernetes Ingress Controller Fake Certificate
verify error:num=18:self signed certificate
verify return:1
depth=0 O = Acme Co, CN = Kubernetes Ingress Controller Fake Certificate
verify return:1
不幸的是,我没有选择使用像 --default-ssl-certificate 这样的参数,因为它是一个预先打包的 helm 图表,而且还有其他具有不同证书的入口。
还有什么我可以探索的吗?
已部署入口的片段。 tls.secretName 中提到的秘密是正确的并且符合预期。
spec:
rules:
- host: connectivity-proxy.cs-dev.transparent-proxy.eurekacloud.io
http:
paths:
- backend:
service:
name: connectivity-proxy-tunnel-0
port:
number: 8042
path: /
pathType: Prefix
tls:
- hosts:
- connectivity-proxy.cs-dev.transparent-proxy.eurekacloud.io
secretName: pr-ingress-secret
进入前秘密的秘密片段。 Base 64 编码值符合预期。
apiVersion: v1
data:
ca.crt: <Base 64 encoded value of CA Cert>
tls.crt: <Base 64 encoded value of TLS Cert>
tls.key: <Base 64 encoded value of TLS Key>
kind: Secret
metadata:
annotations:
meta.helm.sh/release-name: connectivity-proxy
meta.helm.sh/release-namespace: connectivity-proxy
creationTimestamp: "2024-03-02T07:32:56Z"
labels:
app.kubernetes.io/managed-by: Helm
name: pr-ingress-secret
namespace: connectivity-proxy
resourceVersion: "3674684903"
uid: 401e2621-789b-4ecd-803c-8e3ceb56513b
type: Opaque
安装入口控制器后,您将能够解释
kind: Ingress
的清单
您需要创建 Ingress 定义并将其应用到您的集群。 在入口定义中,您可以指定要使用的证书 - 您基本上指向保存 TLS 私钥和证书的秘密。
kubectl create secret tls my-tls-secret --key /path/to/tls.key --cert /path/to/tls.crt -n your-namespace
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: my-ssl-ingress
namespace: your-namespace
annotations:
# Use nginx as the ingress controller
kubernetes.io/ingress.class: "nginx"
# Enable SSL redirect to automatically redirect HTTP to HTTPS
nginx.ingress.kubernetes.io/ssl-redirect: "true"
spec:
tls:
- hosts:
- example.com
secretName: my-tls-secret
rules:
- host: example.com
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: my-service
port:
number: 80
注释是特定于入口控制器的。根据入口控制器和您的需求,可能需要更改或删除它们。