Kubernetes nginx-ingress TLS问题

时间:2018-01-26 14:41:58

标签: ssl nginx kubernetes

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

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

在群集中,我已经部署了nginx-ingress头盔图,在30200时将NodePort暴露给https

我已从上述证书中创建了一个名为 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_certificate ssl_certificate_key ,以及 ssl_trusted_certificate 指向正确的位置

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

2 个答案:

答案 0 :(得分: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

答案 1 :(得分:0)

如果没有可用的证书(您说model.add(Dense(50, input_shape=(128, 2), kernel_initializer="he_normal" ,activation="relu")) 中的证书),证书无效或如果控制器在{中找不到匹配的主机,则入口控制器将默认为Kubernetes Ingress Controller Fake Certificate {1}},或者您未配置默认TLS证书就点击了默认后端。

由于您可以提供服务,所以我怀疑其中之一:

  1. 您的test-secret无效,可能是因为您缺少中间证书或CA证书
  2. 您的.spec.tls[]在错误的命名空间中
  3. 未匹配tls机密,(也许是因为使用了test-secrettest-secret标志?)

在负载均衡器前面将入口控制器公开为https://{ip for k8s node}:30200/myapp/ping -H 'Host:fake.example.com'是不寻常的。如果这是云部署,则应使用类型-k。如果是前提条件,则可以查看MetalLB