Kubernetes nginx-ingress TLS问题

4

我的公司已经有一个用于 fake.example.com 的现有CA证书,并且有一个A记录将 fake.example.com 映射到我们负载均衡器的IP。

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

在集群中,我部署了nginx-ingress helm chart,将https暴露为30200的NodePort。

我使用上述证书创建了一个名为test-secret的k8s TLS secret。

我部署了一个名为“test”的服务应用程序,并安装了以下ingress:

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.comssl_certificatessl_certificate_keyssl_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中)时,入口控制器将默认使用Kubernetes Ingress Controller Fake Certificate,或者证书无效,或者控制器找不到匹配的主机在.spec.tls[]中,或者在没有配置默认TLS证书的情况下访问默认后端。

由于您能够访问您的服务,我怀疑以下原因之一:

  1. 您的test-secret无效,可能是因为缺少中间证书或CA证书
  2. 您的test-secret位于错误的命名空间
  3. tls密钥不匹配(可能是因为使用了https://{k8s节点的IP}:30200/myapp/ping -H 'Host:fake.example.com'-k标志?)

当您的入口控制器前面有负载均衡器时,将其公开为NodePort是不寻常的。如果这是云部署,则应使用LoadBalancer类型。如果这是在本地部署,则可以考虑MetalLB


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接