我的公司有一个现有的fake.example.com CA证书和一个将fake.example.com映射到我们的负载均衡器IP的A记录
负载均衡器将流量转发到我们的Kubernetes集群 .
在集群中,我已经部署了nginx-ingress头盔图,在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以使用正确的证书?
2 回答
您必须创建名为
test-secret
的机密 .如果没有可用的证书(您说是在
test-secret
中),证书无效,或者控制器在.spec.tls[]
中找不到匹配的主机,或者您在没有默认值的情况下点击默认后端,则入口控制器将默认为Kubernetes Ingress Controller Fake Certificate
已配置TLS证书 .既然您能够获得服务,那么我怀疑:
您的
test-secret
无效,可能是因为您缺少中间证书或CA证书您的
test-secret
位于错误的命名空间中tls秘密没有匹配,(可能是因为使用
https://{ip for k8s node}:30200/myapp/ping -H 'Host:fake.example.com'
或-k
标志?)当您的入口控制器位于其前面时,将入口控制器暴露为
NodePort
是不常见的 . 如果这是 Cloud 部署,那么您将使用类型LoadBalancer
. 如果这是在本地,你可能会看MetalLB