首页 文章

Kubernetes nginx-ingress TLS问题

提问于
浏览
4

我的公司有一个现有的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 回答

  • 0

    您必须创建名为 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
    
  • 0

    如果没有可用的证书(您说是在 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

相关问题