【问题标题】:Kubernetes ingress How to set default-ssl-certificate?Kubernetes入口如何设置default-ssl-certificate?
【发布时间】:2019-11-21 10:23:38
【问题描述】:

我有一个通用 SSL 证书 *.domain.com 我想为 4 级域 (my4.level.domain.com) 配置 HTTPS 我读了in this discussion,我需要使用--default-ssl-certificate

但我不明白如何使用它

我应该如何更改此配置?

ingress:
  enabled: true
  annotations: {}
  labels: {}
  path: /
  hosts:
    - my4.level.domain.com
  extraPaths: []
  tls:
   - secretName: tls-tierra-ingress
     hosts:
       - '*.level.domain.com'
       - level.domain.com
       - my4.level.domain.com

或者我必须运行一个特殊的命令吗?

【问题讨论】:

    标签: kubernetes-helm kubernetes-ingress


    【解决方案1】:

    --default-ssl-certificateIngress controller 内部使用的参数。 Here 是 Ingress Controller 接受的所有命令行参数的列表。

    要查看使用了哪些参数,您可以执行kubectl describe deployment/nginx-ingress-controller --namespace

    你可能会看到:

    Args:
      --default-backend-service=$(POD_NAMESPACE)/default-http-backend
      --tcp-services-configmap=$(POD_NAMESPACE)/tcp-services
      --annotations-prefix=nginx.ingress.kubernetes.io
    

    您可以编辑控制器 yaml 并输入您的设置所需的内容,如果您没有该文件,您可以使用以下命令将部署的入口保存为 ingress-controller.yamlkubectl get deployment/nginx-ingress-controller --namespace -o yaml > ingress-controller.yaml

    您还可以使用以下方法即时编辑ingresskubectl edit deployment/nginx-ingress-controller --namespace

    至于4级域名SSL证书,我没试过,可惜我帮不上忙。

    【讨论】:

    • 如果有人通过 Helm 安装 Nginx Ingress Controller,您需要 kubectl edit deployment nginx-ingress-controller -n <namespace> 并将 --default-ssl-certificate arg 添加到 args:。然后重启 nginx 入口控制器。
    • @dvdblk 在kubernetes/nginx-ingress Helm chart 中,可以使用controller.extraArgs 值传递控制器参数。
    【解决方案2】:

    我没有 kubernetes,但从这篇文章来看: https://kubernetes.github.io/ingress-nginx/user-guide/tls/

    您需要在入口控制器中使用参数--default-ssl-ceritifcate 指定默认密码,然后只需删除yalm 中的“secretName”选项,它应该使用默认证书。

    【讨论】:

      【解决方案3】:

      首先确保你有一个通配符证书,继续看看它是如何使用 certbot 完成的:

      https://certbot.eff.org/glossary#wildcard-certificate

      对于子子域,您必须在创建证书时指定子域,例如:

      user$: certbot certonly --manual \
              --preferred-challenges=dns \
              --email your-email@gmil.com \
              --server https://acme-v02.api.letsencrypt.org/directory \
              --agree-tos \
              -d '*.level.domain.com' -d '*.domain.com' -d domain.com
      

      那么您必须进行 dns 质询以验证它是您的域。 使用 certbot "* . * .example.com" 无效,我不知道它是否可能与任何其他证书颁发机构一起使用,但如果您希望这是动态的,您最好使用 kubernetes 证书管理器在当场颁发证书入口规则已创建。

      您可以使用以下命令添加 --default-ssl-certificate:

      kubectl 编辑部署 ingress-nginx-controller

      然后将其添加到 spec.template.spec.containers.args 下

      如果您想拥有一个证书。总之,在通过 dns 挑战并获取 .pem 文件后,首先创建一个 tls 机密:

      apiVersion: v1
      kind: Secret
      metadata:
        name: tls-secret
      data:
        # fullchain.pem converted to base64 (all 3 certificates dont remove line breaks before converting)
        tls.crt: "LS0tLS1CRUdJTiBQLS0tLS1CRUdJTiBQ.......BTkJna3Foa2lHOXcwQkF=="
        # privekey.pem converted to base64 (dont remove line breaks before converting)
        tls.key: "LS0tLS1CRUd.......XcwQkFRRUZBQVN=="
      type: kubernetes.io/tls
      

      然后使用 tls 创建一个入口规则:

      apiVersion: networking.k8s.io/v1
      kind: Ingress
      metadata:
        name: my-ingress
        annotations:
          #ingress-nginx-controller has to be installed/created
          kubernetes.io/ingress.class: "nginx"
          nginx.ingress.kubernetes.io/ssl-redirect: "true"
      spec:
        rules:
          - host: sub.domain.com
            http:
              paths:
                - pathType: Prefix
                  path: /
                  backend:
                    service:
                      name: http-svc
                      port:
                        number: 8080
        tls:
        - hosts:
          - sub.domain.com
          secretName: tls-secret
      

      【讨论】:

      • 我不喜欢这个选项,因为它严重违反了 DRY。需要在 each Ingress 资源定义中指定tls.secretName 并不理想。
      • @BradSolomon 你是对的,这就是为什么我说你可以使用证书管理器,但也可以使用 Reflector 来解决这个问题:github.com/emberstack/kubernetes-reflectorreflector 基本上反映了你的 Secret 或 ConfigMap 全部或选择命名空间,您还可以将其设置为自动或按需反映。这意味着您可以在一个命名空间中设置 tls-secret,并且入口规则将始终找到它的“镜像”克隆,以便在任何地方更改它,您只需更改反映的源 tls-secret。
      猜你喜欢
      • 2017-11-09
      • 2019-11-20
      • 2018-10-07
      • 2020-08-14
      • 2020-08-18
      • 2020-09-07
      • 1970-01-01
      • 2021-05-30
      • 1970-01-01
      相关资源
      最近更新 更多