将 ssl 证书添加到 helm 图表中

问题描述 投票:0回答:1

我在 rancher 中添加了 ssl 证书密钥,并在 helm 图表中配置了入口文件,如下所示:

{{- $fullName := include "api-chart.fullname" . -}}
{{- $ingressPath := .Values.ingress.path -}}
{{- $apiIngressPath := .Values.ingress.apiPath -}}
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: {{ $fullName }}
  labels:
    app.kubernetes.io/name: {{ include "api-chart.name" . }}
    helm.sh/chart: {{ include "api-chart.chart" . }}
    app.kubernetes.io/instance: {{ .Release.Name }}
    app.kubernetes.io/managed-by: {{ .Release.Service }}
  annotations:
    kubernetes.io/ingress.class: nginx
{{- with .Values.ingress.annotations }}
{{ toYaml . | indent 4 }}
{{- end }}
spec:
  tls:
    - hosts:
        - {{ .Values.ingress.host }}
      secretName: {{ .Values.ssl.certSecretName }}
  rules:
    - host: {{ .Values.ingress.host }}
      http:
        paths:
          - path: {{ $ingressPath }}
            backend:
              serviceName: {{ $fullName }}
              servicePort: 80
          - path: {{ $apiIngressPath }}
            backend:
              serviceName: {{ $fullName }}
              servicePort: 8080

但是,在访问 https 站点时,仍然会收到默认的假 Nginx 证书。 Nginx服务器也需要改吗?如果这看起来很奇怪,那就需要在两个地方添加证书信息。如果不是的话,还有什么问题吗?

kubectl describe ingress
给出以下响应:

Name:             my-test-install-app72-project-jupyter-labs
Namespace:        default
Address:          10.240.0.4
Default backend:  default-http-backend:80 (<none>)
Rules:
  Host                                    Path  Backends
  ----                                    ----  --------
  project-jupyter-labs-2.company.com  
                                          /test72-new-user   my-test-install-app72-project-jupyter-labs:80 (10.244.4.20:8888)
                                          /base-url          my-test-install-app72-project-jupyter-labs:8080 (10.244.4.20:8080)
Annotations:
  field.cattle.io/publicEndpoints:              [{"addresses":["10.240.0.4"],
                                                  "port":80,
                                                  "protocol":"HTTP",
                                                  "serviceName":"default:my-test-install-app72-project-jupyter-labs",
                                                  "ingressName":"default:my-test-install-app72-project-jupyter-labs",
                                                  "hostname":"project-jupyter-labs-2.company.com",
                                                  "path":"/test72-new-user",
                                                  "allNodes":false},
                                                 {"addresses":["10.240.0.4"],
                                                  "port":80,
                                                  "protocol":"HTTP",
                                                  "serviceName":"default:my-test-install-app72-project-jupyter-labs",
                                                  "ingressName":"default:my-test-install-app72-project-jupyter-labs",
                                                  "hostname":"project-jupyter-labs-2.company.com",
                                                  "path":"/base-url",
                                                  "allNodes":false}]
  kubernetes.io/ingress.class:                  nginx
  meta.helm.sh/release-name:                    my-test-install-app72
  meta.helm.sh/release-namespace:               default
  nginx.ingress.kubernetes.io/proxy-body-size:  2G
Events:
  Type    Reason  Age                From                      Message
  ----    ------  ----               ----                      -------
  Normal  CREATE  81s                nginx-ingress-controller  Ingress default/my-test-install-app72-project-jupyter-labs
  Normal  CREATE  81s                nginx-ingress-controller  Ingress default/my-test-install-app72-project-jupyter-labs
  Normal  UPDATE  23s (x2 over 23s)  nginx-ingress-controller  Ingress default/my-test-install-app72-project-jupyter-labs
  Normal  UPDATE  23s (x2 over 23s)  nginx-ingress-controller  Ingress default/my-test-install-app72-project-jupyter-labs

更新: 我在访问错误日志时遇到问题。似乎您需要以 root 身份执行容器才能看到这些。然而我发现 nginx.conf 文件的服务器部分包含以下内容:

ssl_certificate_by_lua_block {                                                                                                                   
                        certificate.call()                                                                                                                       
                }

如果我将其更改为我手动添加到容器中的证书和密钥文件的 ssl_certifacte 和 ssl_certifacte_key 路径,那么它就可以工作。 上述

ssl_certificate_by_lua_block
对于 ingress.yaml 文件来说看起来正常吗?如果是这样,还有什么问题呢?如果没有,可能是什么原因导致无法配置?

应用以下补丁似乎可以为 https 提供正确的 SSL 证书:

kubectl patch ingress <app-instance-name> -p '{"spec":{"tls":[{"hosts":["project-jupyter-labs-2.company.com"], "secretName": "tls-secret-name"}]}}'

我仍然不清楚为什么这可以解决问题。我将不胜感激任何可能的解释。

ssl nginx kubernetes tls1.2
1个回答
0
投票

应用以下补丁似乎允许正确的 SSL 证书可用于 https:

kubectl patch ingress <app-instance-name>  -p '{"spec":{"tls":[{"hosts":["project-jupyter-labs-2.company.com"], "secretName": "tls-secret-name"}]}}'

我仍然不清楚为什么这可以解决问题。我会 感谢任何可能的解释。

如果没有您提供的最小可重现示例,几乎不可能推断出它。看看“最小可重现示例”应该是什么样子。 我们对您生成的 Ingress 清单文件(由 helm 生成)、Ingress Controller 版本及其配置(包括安装方式)以及底层 Kubernetes 环境一无所知。

一些提示:

请记住,Ingress/Secret 资源是命名空间对象,因此在您的情况下,Ingress 应引用同一命名空间中的 Secret。 到底如何创建 TLS 机密?

我可以向您保证,您的案例可以在健康的 Ingress Controller 设置中重现,每当我在正确的命名空间中创建 Ingress 引用的机密时,控制器都会自动检测到它,将其添加到本地存储,并进行动态重新配置。

最后我认为你的问题更适合直接报告Nginx Ingress Controller github的项目:

https://github.com/kubernetes/ingress-nginx/issues/new

© www.soinside.com 2019 - 2024. All rights reserved.