gpt4 book ai didi

Kubernetes环境cert-manager部署与应用

转载 作者:我是一只小鸟 更新时间:2023-02-11 22:33:55 25 4
gpt4 key购买 nike

本作品 由 Galen Suen 采用 知识共享署名-非商业性使用-禁止演绎 4.0 国际许可协议 进行许可。由 原作者 转载自 个人站点 .

概述

本文用于整理基于 Kubernetes 环境的 cert-manager 部署与应用,实现证书管理和 Ingress 启用TLS配置.

随着各相关组件版本的更新,笔者将在验证通过后对本文进行补充和更新,请参考 更新记录 .

本次演练环境为 Kubernetes 集群环境,环境配置可参考笔者另一篇笔记《 Kubernetes集群部署笔记 》.

本次演练使用 Traefik 作为 Ingress Controller 实现,环境配置可参考笔者另一篇笔记《 Kubernetes环境Traefik部署与应用 》.

本次演练使用 Cloudflare 提供的 DNS解析服务 ,并假定读者已经注册了 Cloudflare 并正确配置了网站。有关 Cloudflare 的配置和使用,请参考 Cloudflare帮助中心 或相关文档.

组件版本

  • cert-manager v1.11.0

配置过程

安装cert-manager

  • 参考官方文档,使用 kubectl 安装 cert-manager ,所有参数使用默认值,这将会把 cert-manager 安装至 cert-manager 命名空间.

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

配置Issuer和ClusterIssuer

  • 配置API Token 。

    本次演练使用 Cloudflare 提供的 DNS解析服务 ,实现通过 DNS-01 质询方式申请证书,可根据需要替换为其他 支持的DNS-01验证程序 ,或通过 Webhook 方式扩展 cert-manager 对其他DNS解析服务的支持.

    首先,登录 Cloudflare控制面板 ,打开 API Tokens 页面,按照 cert-manager文档 中的说明,创建一个API Token,记录该API Token的值用于后续操作.

                                
                                  - Permissions
      - Zone - DNS - Edit
      - Zone - Zone - Read
    - Zone Resources:
      - Include - All Zones
    
                                
                              
  • 创建 Issuer 和 ClusterIssuer 。

    cert-manager 提供两种用于 签发证书 的对象: Issuer 和 ClusterIssuer ,简单地说, Issuer 是命名空间级别的资源,无法用于处理跨命名空间的证书签发请求; ClusterIssuer 是集群级别的资源,可以用于处理跨命名空间的证书签发请求.

    创建一个 Issuer 对象.

                                
                                  cat <<EOF | kubectl apply -f -
    apiVersion: v1
    kind: Secret
    metadata:
      name: cloudflare-api-token-secret
      namespace: apps-choral
    type: Opaque
    stringData:
      api-token: '<REDACTED>' # 这里的值为[配置API Token]一节中创建的API Token值
    
    ---
    apiVersion: cert-manager.io/v1
    kind: Issuer
    metadata:
      name: cloudflare-acme-issuer
      namespace: apps-choral
    spec:
      acme:
        email: '<REDACTED>'
        # 配置证书目录,演练环境使用Staging环境
        # server: https://acme-v02.api.letsencrypt.org/directory
        server: https://acme-staging-v02.api.letsencrypt.org/directory
        privateKeySecretRef:
          name: acme-issuer-account-key
        solvers:
        - dns01:
            cloudflare:
              apiTokenSecretRef:
                name: cloudflare-api-token-secret # 引用当前文档中创建的Secret名称
                key: api-token
    EOF
    
                                
                              

    创建一个 ClusterIssuer 对象.

                                
                                  cat <<EOF | kubectl apply -f -
    apiVersion: v1
    kind: Secret
    metadata:
      name: cloudflare-api-token-secret
      namespace: cert-manager # 这里配置为安装cert-manager资源的命名空间
    type: Opaque
    stringData:
      api-token: '<REDACTED>' # 这里的值为[配置API Token]一节中创建的API Token值
    
    ---
    apiVersion: cert-manager.io/v1
    kind: ClusterIssuer
    metadata:
      name: cloudflare-acme-cluster-issuer
    spec:
      acme:
        email: '<REDACTED>'
        # 配置证书目录,演练环境使用Staging环境
        # server: https://acme-v02.api.letsencrypt.org/directory
        server: https://acme-staging-v02.api.letsencrypt.org/directory
        privateKeySecretRef:
          name: acme-issuer-account-key
        solvers:
        - dns01:
            cloudflare:
              apiTokenSecretRef:
                name: cloudflare-api-token-secret # 引用当前文档中创建的Secret名称
                key: api-token
    EOF
    
                                
                              

配置Ingress TLS

可以通过手动创建或基于注解自动创建 Certificate 资源, cert-manager 会自动管理签发证书并保存至指定的 Secret 对象中,并 自动管理续期 .

  • 手动创建 Certificate 资源 。

    首选,创建一个 Certificate 对象,这会触发 spec.issuerRef 字段指定的 Issuer 或 ClusterIssuer 签发TLS证书,并保存至 spec.secretName 字段指定的 Secret 对象中.

                                
                                  cat <<EOF | kubectl apply -f -
    apiVersion: cert-manager.io/v1
    kind: Certificate
    metadata:
      name: cert-local-choral-io
      namespace: apps-choral
    spec:
      dnsNames:
      - 'local.choral.io'
      - '*.local.choral.io'
      issuerRef:
        kind: ClusterIssuer
        name: cloudflare-acme-cluster-issuer
      secretName: cert-local-choral-io
    EOF
    
                                
                              

    证书签发成功后,配置 Ingress 使用指定的 Secret 实现TLS.

                                
                                  cat <<EOF | kubectl apply -f -
    apiVersion: networking.k8s.io/v1
    kind: Ingress
    metadata:
      name: whoami
      namespace: apps-choral
      annotations:
        traefik.ingress.kubernetes.io/router.entrypoints: websecure
    spec:
      tls:
        - secretName: cert-local-choral-io
      rules:
        - host: whoami.local.choral.io
          http:
            paths:
              - path: /
                pathType: Prefix
                backend:
                  service:
                    name: whoami
                    port:
                      number: 80
    EOF
    
                                
                              
  • 配置 Ingress注解 自动创建 Certificate 资源 。

    配置 Ingress注解 ,使用 cert-manager.io/issuer 指定 Issuer ,或使用 cert-manager.io/issuer 指定 ClusterIssuer ,这会触发指定的 Issuer 或 ClusterIssuer 签发TLS证书,并保存至 spec.tls[*].secretName 字段指定的 Secret 对象中.

                                
                                  cat <<EOF | kubectl apply -f -
    apiVersion: networking.k8s.io/v1
    kind: Ingress
    metadata:
      name: whoami
      namespace: apps-choral
      annotations:
        cert-manager.io/issuer: cloudflare-acme-issuer
        traefik.ingress.kubernetes.io/router.entrypoints: websecure
    spec:
      tls:
        - hosts:
            - whoami.local.choral.io
          secretName: cert-local-choral-io
      rules:
        - host: whoami.local.choral.io
          http:
            paths:
              - path: /
                pathType: Prefix
                backend:
                  service:
                    name: whoami
                    port:
                      number: 80
    EOF
    
                                
                              

参考资料

  • https://cert-manager.io/docs/ 。

  • https://letsencrypt.org/docs/challenge-types/ 。

最后此篇关于Kubernetes环境cert-manager部署与应用的文章就讲到这里了,如果你想了解更多关于Kubernetes环境cert-manager部署与应用的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com