【问题标题】:How to deploy a letsencryp with cert-manager and HAProxy-ingress如何使用 cert-manager 和 HAProxy-ingress 部署 letsencryp
【发布时间】:2020-03-15 03:05:52
【问题描述】:

深入www,没有找到答案: 我想知道如何将 cert-manager 与 haproxy-ingress 一起使用并进行加密。

任何文档/指南?

【问题讨论】:

    标签: kubernetes lets-encrypt haproxy-ingress


    【解决方案1】:

    您可以尝试安装 jetstack 提供的证书管理器,可以在 here 找到,然后您需要按照此 stackoverflow post 中提到的步骤进行操作,这将为您解决问题。

    内部 acme-challenge 将由证书管理器完成,一旦您将证书中提到的密钥名称修补到入口的 TLS,然后证书状态将变为就绪状态,请注意,密钥将自动创建,您需要不创建它

    【讨论】:

      【解决方案2】:
      1. 使用部署 Certmanager:

        kubectl apply -f https://github.com/jetstack/cert-manager/releases/download/v1.4.0/cert-manager.yaml

        kubectl apply -f https://github.com/jetstack/cert-manager/releases/download/v1.4.0/cert-manager.crds.yaml

      2. 部署 ClusterIssuer(集群发布者与命名空间无关)

      cat > prod-issuer.yaml <<EOF
      apiVersion: cert-manager.io/v1
      kind: ClusterIssuer
      metadata:
        name: letsencrypt-prod
      spec:
        acme:
          server: https://acme-v02.api.letsencrypt.org/directory
          email: email@example.com
          privateKeySecretRef:
            name: letsencrypt-prod
          solvers:
          - http01:
              ingress:
                class: haproxy
      EOF
      

      使用kubectl apply -f prod-issuer.yaml申请集群发行者

      1. 创建入口资源(命名空间不可知论,本示例使用 Nginx 后端服务)
      cat > nginx-ingress.yaml <<EOF
      apiVersion: networking.k8s.io/v1
      kind: Ingress
      metadata:
        name: nginx-router
        namespace: production
        annotations:
          kubernetes.io/ingress.class: "haproxy"
          cert-manager.io/cluster-issuer: "letsencrypt-prod"
      spec:
        tls:
        - hosts:
          - "example.com"
          secretName: nginx-tls-secret
        rules:
        - host: example.com
          http:
            paths:
            - pathType: ImplementationSpecific
              path: "/"
              backend:
                service:
                  name: nginx
                  port: 
                    number: 80
        - host: www.example.com
          http:
            paths:
            - pathType: ImplementationSpecific
              path: "/"
              backend:
                service:
                  name: nginx
                  port: 
                    number: 80
      EOF
      

      使用kubectl apply -f nginx-ingress.yaml应用入口资源

      这里的重要信息是,Haproxy 控制器不需要注释 acme.cert-manager.io/http01-edit-in-place: "true" 那个 nginx-ingress 控制器。它按预期工作,没有任何额外的注释。 当您将 Ingress Resource 应用到集群时,证书将在 1-2 分钟内颁发。 使用kubectl describe certificate nginx-tls-secret -n production查看证书状态,查看事件获取证书。

      如果出现问题,有关更多调试信息,请参阅此处https://cert-manager.io/docs/faq/acme/

      【讨论】:

        猜你喜欢
        • 2021-12-02
        • 1970-01-01
        • 1970-01-01
        • 2020-10-25
        • 2019-07-27
        • 1970-01-01
        • 1970-01-01
        • 2018-08-05
        • 2019-12-21
        相关资源
        最近更新 更多