我的公司有一个现有的fake.example.com CA证书和一个将fake.example.com映射到负载均衡器IP的记录
负载均衡器正在将流量转发给我们的Kubernetes集群。
在集群中,我部署了nginx-ingress舵机图表,将https的NodePort公开为30200。
我从上面的证书中创建了一个名为test- 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来使用正确的证书?
发布于 2018-07-14 03:26:22
您必须创建一个名为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发布于 2018-10-06 17:28:34
如果没有可用的证书(您说是在Kubernetes Ingress Controller Fake Certificate中),该证书是无效的,或者如果控制器在.spec.tls[]中找不到匹配的主机,或者没有配置默认的TLS证书,则入口控制器将默认为TLS。
既然你能得到你的服务,那么我怀疑:
test-secret无效,可能是因为您丢失了一个中间证书或CA证书。test-secret位于错误的命名空间中https://{ip for k8s node}:30200/myapp/ping -H 'Host:fake.example.com'或-k标志?)当您前面有一个负载均衡器时,将您的入口控制器公开为NodePort是很不寻常的。如果这是一个云部署,那么您将使用LoadBalancer类型。如果这是前提条件,您可以查看MetalLB
https://stackoverflow.com/questions/48463615
复制相似问题