我的公司有一个用于 fake.example.com 的现有 CA 证书和一个将 fake.example.com 映射到负载均衡器 IP 的 A 记录
负载均衡器正在将流量转发到我们的 Kubernetes 集群。
在集群中,我部署了 nginx-ingress helm 图表,在 30200 处公开了 https 的 NodePort
我已经从上面的证书创建了一个名为test-secret的k8s TLS密钥。
我已经部署了一个带有服务"test"的应用程序,并安装了以下入口:
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: test-ingress
namespace: default
annotations:
kubernetes.io/ingress.class: nginx
spec:
tls:
- hosts:
- fake.example.com
secretName: test-secret
rules:
- host: fake.example.com
http:
paths:
- path: /myapp
backend:
serviceName: test
servicePort: 8080
所以,如果我执行
curl https://{ip for k8s node}:30200/myapp/ping -H 'Host:fake.example.com' -k --verbose
我从我的应用程序获得了预期的响应,但我也看到了
* Server certificate:
* subject: O=Acme Co; CN=Kubernetes Ingress Controller Fake Certificate
* start date: Jan 25 20:52:16 2018 GMT
* expire date: Jan 25 20:52:16 2019 GMT
* issuer: O=Acme Co; CN=Kubernetes Ingress Controller Fake Certificate
我已经在nginx.conf文件中确认,server_name fake.exampe.com ssl_certificate,ssl_certificate_key和ssl_trusted_certificate指向正确的位置
所以我的问题是,在这种情况下是否可以将nginx配置为使用正确的证书?
您必须创建一个名为 test-secret
的密钥。
➜ charts git:(master) kubectl describe secret --namespace operation mydomain.cn-cert
Name: mydomain.cn-cert
Namespace: operation
Labels: <none>
Annotations: <none>
Type: Opaque
Data
====
tls.crt: 3968 bytes
tls.key: 1678 bytes
当没有可用的证书(您说证书在test-secret
中(、证书无效或控制器在 .spec.tls[]
中找不到匹配的主机时,或者您在未配置默认 TLS 证书的情况下命中默认后端时,入口控制器将默认为 Kubernetes Ingress Controller Fake Certificate
。
既然您能够获得您的服务,那么我怀疑
:- 您的
test-secret
无效,可能是因为您缺少中间证书或 CA 证书 - 您的
test-secret
位于错误的命名空间中 - tls 机密未匹配(可能是因为使用了
https://{ip for k8s node}:30200/myapp/ping -H 'Host:fake.example.com'
或-k
标志?
前面有负载均衡器时,将入口控制器公开为NodePort
是不寻常的。如果这是云部署,则应使用类型 LoadBalancer
。如果这是在前提下,你可以看看 金属LB