Kubernetes nginx-ingress TLS issue



我的公司有一个用于 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_keyssl_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

既然您能够获得您的服务,那么我怀疑

  1. 您的test-secret无效,可能是因为您缺少中间证书或 CA 证书
  2. 您的test-secret位于错误的命名空间中
  3. tls 机密未匹配(可能是因为使用了 https://{ip for k8s node}:30200/myapp/ping -H 'Host:fake.example.com'-k 标志?
当入口控制器

前面有负载均衡器时,将入口控制器公开为NodePort是不寻常的。如果这是云部署,则应使用类型 LoadBalancer 。如果这是在前提下,你可以看看 金属LB

最新更新