我已在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文件的server部分包含以下内容:
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"}]}}'
为什么这可以解决问题,我仍然不清楚。我将不胜感激。
答案 0 :(得分:0)
应用以下补丁似乎允许使用正确的SSL 证书可用于https:
kubectl patch ingress <app-instance-name> -p '{"spec":{"tls":[{"hosts":["project-jupyter-labs-2.company.com"], "secretName": "tls-secret-name"}]}}'
为什么这可以解决问题,我仍然不清楚。我会 感谢任何可能的解释。
如果没有您提供的最少可复制示例,则几乎不可能推断出它。看看minimal reproducible example的样子。
我们对您生成的Ingress清单文件(由Helm生成),Ingress Controller版本及其配置(包括安装方式)以及底层Kubernetes环境一无所知。
只有几点提示:
请记住,Ingress / Secret资源是命名空间对象,因此在您的情况下,Ingress应该引用同一命名空间中的secret。 您究竟如何创建TLS机密?
我可以向您保证,您的案件可以在健康的Ingress Controller设置中重现,并且每当我在正确的名称空间中创建Ingress引用的机密时,控制器都会自动检测到它,并将其添加到本地存储中,并进行动态重新配置。 / p>
最后,我认为您的问题更适合直接报告Nginx Ingress Controller github的项目:https://github.com/kubernetes/ingress-nginx/issues/new