我有一个Kubernetes集群(v.1.22(,里面部署了Nginx入口控制器。我发现我可以在几种情况下重新加载入口:下一个列表描述了需要重新加载时的场景:
- 新建入口资源
- TLS部分已添加到现有入口
- Ingress注释的更改不仅影响上游配置。例如,负载平衡注释不需要重新加载
- 入口中添加/删除路径
- 入口、服务、秘密被移除
- Ingress中缺少的某些引用对象是可用的,如Service或Secret
- "秘密"已更新
我的入口现在只使用HTTP流量,我想将TLS部分添加到现有的入口。
所以,我的问题是:我到底应该怎么做才能重新加载入口
我在文档或其他地方找不到任何信息。欢迎提出任何建议!
我应该如何重新加载入口
您只需要更新入口,在您的情况下,您只需要将TLS部分添加到现有的入口中。
然后(自动地(入口控制器应该找到差异(正如anemyte在回答中所说(并更新入口。从现在起,您将能够使用TLS。
一般来说,这一切都应该自动发生。理论上,这也可以手动完成,尽管不建议这样做。本主题对此进行了描述。
编辑:
我再现了这种情况。首先,我用以下ingress.yaml
:创建了简单的入口
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: ing-1
spec:
ingressClassName: nginx
rules:
- host: www.example.com
http:
paths:
- backend:
service:
name: app-1
port:
number: 80
path: /
pathType: Prefix
然后我运行了kubectl get ingress
,这里是输出:
NAME CLASS HOSTS ADDRESS PORTS AGE
ing-1 nginx www.example.com 35.X.X.X 80 3m
在这一步中,我有工作入口没有TLS(只有工作端口80(。然后我为TLS创建了tls.yaml
(我使用了自签名证书,您需要使用您的证书和域(:
apiVersion: v1
kind: Secret
metadata:
name: tls
data:
tls.crt: |
<my cert>
tls.key: |
<my key>
type: kubernetes.io/tls
我已经通过kubectl apply -f tls.yaml
进行了磨合,然后我将ingress.yaml
更改如下:
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: ing-1
spec:
ingressClassName: nginx
rules:
- host: www.example.com
http:
paths:
- backend:
service:
name: app-1
port:
number: 80
path: /
pathType: Prefix
# This section is only required if TLS is to be enabled for the Ingress
tls:
- hosts:
- www.example.com
secretName: tls
我添加了TLS部分。然后我运行了kubectl apply -f ingress.yaml
,几秒钟后,当运行kubectl get ingress
:时,我可以看到这个输出
NAME CLASS HOSTS ADDRESS PORTS AGE
ing-1 nginx www.example.com 35.239.7.126 80, 443 18m
TLS正在工作。在日志中,我可以看到以下消息:
Event(v1.ObjectReference{Kind:"Ingress", Namespace:"default", Name:"ing-1", UID:"84966fae-e135-47bb-8110-bf372de912c8", APIVersion:"networking.k8s.io/v1", ResourceVersion:"11306", FieldPath:""}): type: 'Normal' reason: 'Sync' Scheduled for sync
入口自动重新加载:(
在所有情况下,您所要做的就是更新Ingress或相关资源(例如,包含证书的机密(。您从文档中引用的更多的是应用程序的技术背景,换句话说:在这种情况下,重载是必要的。当控制器注意到与控制器相关联的资源发生变化时,实际的重新加载由控制器本身完成。您可以重新启动pod(或在每个pod中执行nginx -s reload
(以强制更新,但根据我的经验,没有这样的要求。