如何重新加载nginx入口控制器



我有一个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(以强制更新,但根据我的经验,没有这样的要求。

最新更新