【问题标题】:Kubernetes nginx-ingress TLS issueKubernetes nginx-ingress TLS 问题
【发布时间】:2018-07-05 22:14:04
【问题描述】:

我的公司拥有 fake.example.com 的现有 CA 证书和将 fake.example.com 映射到我们负载均衡器 IP 的 A 记录

负载均衡器正在将流量转发到我们的 Kubernetes 集群。

在集群中,我已经部署了 nginx-ingress helm chart,在 30200 处为 https 暴露 NodePort

我从上述证书创建了一个名为 test-secret 的 k8s TLS 密钥。

我已经部署了一个带有服务“测试”的应用并安装了以下入口:

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_certificatessl_certificate_key >ssl_trusted_certificate 指向正确的位置

所以我的问题是,在这种情况下是否可以配置 nginx 以使用正确的证书?

【问题讨论】:

    标签: ssl nginx kubernetes


    【解决方案1】:

    您必须创建一个名为 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
    

    【讨论】:

      【解决方案2】:

      当没有可用的证书(你说在test-secret)、证书无效或控制器在.spec.tls[] 中找不到匹配的主机时,入口控制器将默认为Kubernetes Ingress Controller Fake Certificate,或您在未配置默认 TLS 证书的情况下点击了默认后端。

      既然您能够联系到您的服务,那么我怀疑:

      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。如果这是前提条件,您可以查看MetalLB

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2020-03-01
        • 2020-12-12
        • 2021-10-16
        • 1970-01-01
        • 2021-05-20
        • 2021-05-15
        • 1970-01-01
        相关资源
        最近更新 更多