K8S 入口控制器、证书管理器和 LetsEncrypt SSL 不起作用

时间:2021-03-11 11:15:08

标签: nginx kubernetes kubernetes-ingress lets-encrypt cert-manager

  1. 我已经创建了一个全新的 K8S 集群

  2. 我已经创建了 Ingress nginx 控制器。

  3. 控制器创建了一个命名空间,其中包含所有必需的 Pod、Svcs 等。

  4. 我创建了一个 Ingress 对象,该对象将流量路由到启用了 TLS 的部署服务。

  5. 我已经创建了一个集群颁发者对象。

  6. 检查 kubectl describe cert 时一切正常。

  7. 检查 kubectl describe clusterissuer 时也是如此。

  8. 执行 curl https://example.com/ 时返回以下错误:

    curl: (60) SSL 证书问题:无法获取本地颁发者证书 更多详情请见:https://curl.haxx.se/docs/sslcerts.html

    curl 未能验证服务器的合法性,因此无法 与其建立安全连接。要了解有关这种情况的更多信息和 如何修复,请访问上述网页。

没有SSL,从外部启用访问并正常工作,当在Ingress对象中添加SSL配置时,它再次失败。


ingress.yaml:

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: minimal-ingress
  annotations:
    cert-manager.io/cluster-issuer: "letsencrypt-prod"
spec:
  tls:
  - hosts:
    - k8s-poc.example.com
    secretName: echo-tls
  rules:
    - host: k8s-poc.example.com
      http:
        paths:
          - path: /
            pathType: Prefix
            backend:
              service:
                name: test-svc
                port: 
                  number: 3333

test-depl.yaml:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: test-depl
  labels:
    app: test
spec:
  replicas: 1
  selector:
    matchLabels:
      app: test
  template:
    metadata:
      labels:
        app: test
    spec:
      containers:
      - name: test
        image: mydockeruser/test:42
        ports:
        - containerPort: 3333
      imagePullSecrets:
      - name: docker-regcred
      terminationGracePeriodSeconds: 30
---
apiVersion: v1
kind: Service
metadata:
  name: test-svc
spec:
  selector:
    app: test
  ports:
    - name: http
      protocol: TCP
      port: 3333
      targetPort: 3333

prod-issuer.yaml:

apiVersion: cert-manager.io/v1alpha2
kind: ClusterIssuer
metadata:
  name: letsencrypt-prod
  namespace: cert-manager
spec:
  acme:
    # The ACME server URL
    server: https://acme-v02.api.letsencrypt.org/directory
    # Email address used for ACME registration
    email: my@email.com
    # Name of a secret used to store the ACME account private key
    privateKeySecretRef:
      name: letsencrypt-prod
    # Enable the HTTP-01 challenge provider
    solvers:
    - http01:
        ingress:
          class: nginx
              

0 个答案:

没有答案