未应用带有证书管理器的入口TLS路由

时间:2019-09-10 02:05:56

标签: ssl kubernetes google-kubernetes-engine nginx-ingress cert-manager

我在GKE中有一个K8s集群(v1.12.8-gke.10),并且具有主机规则的nginx入口。我正在尝试使用cert-manager为入口路由启用TLS。我正在使用自签名群集发行者。但是,当我通过HTTPS访问该站点时,仍会获得默认的K8s证书。 (该证书仅对以下名称有效:kubernetes,kubernetes.default,kubernetes.default.svc,kubernetes.default.svc.cluster.local)

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  namespace: test
  name: test
  annotations:
    kubernetes.io/ingress.class: nginx
    kubernetes.io/ingress.allow-http: "false"
    nginx.ingress.kubernetes.io/rewrite-target: /
    certmanager.k8s.io/cluster-issuer: selfsign
spec:
  tls:
    - secretName: test
      hosts:
        - test.example.com
  rules:
    - host: test.example.com
      http:
        paths:
          - path: /
            backend:
              serviceName: test
              servicePort: 80

我检查了以下内容,并且工作正常:

  1. 一个名为“ selfsign”的集群发行人
  2. 由秘密“测试”支持的有效的自签名证书
  3. 运行良好的Nginx入口部署
  4. 类型为负载平衡器的健康且正在运行的入口服务

2 个答案:

答案 0 :(得分:0)

我认为这是clusterissuer的问题

只需看看我的集群发行者并检查

apiVersion: certmanager.k8s.io/v1alpha1
kind: ClusterIssuer
metadata:
  name: prod
spec:
  acme:
    # The ACME server URL
    server: https://acme-v02.api.letsencrypt.org/directory
    # Email address used for ACME registration
    email: it-support@something.com
    # Name of a secret used to store the ACME account private key
    privateKeySecretRef:
      name: prod
    # Enable the HTTP-01 challenge provider
    http01: {}

检查正确的URL以获取生产级证书:

  

服务器:https://acme-v02.api.letsencrypt.org/directory

如果您的服务器网址是这样的:

  

服务器:https://acme-staging-v02.api.letsencrypt.org/directory

这意味着您正在申请可能会发生错误的登台证书。

答案 1 :(得分:0)

我已经按照Digital Ocean中的教程进行操作,并且能够使用证书管理器为GKE中的Helm,Tiller,Letsencrypt和Nginx Ingress控制器的入口路由启用TLS。

我使用自己的域名而不是主机test-example.com,并出于测试目的而启动了虚拟后端服务(echo1和echo2)。

按照本教程操作并验证HTTPS是否正常运行后,请尝试卷曲主机:

$ curl test.example.com

您应该看到308 http响应(永久重定向)。这表明HTTP请求已被重定向为使用HTTPS。

另一方面,尝试在以下位置运行curl:

$ curl https://test.example.com

应该向您显示站点响应。

您可以使用前面的命令-verbose -v来检入证书握手并验证证书信息。