如何重新加载 Nginx Ingress 控制器。

9
我有一个Kubernetes集群(版本1.22),内部部署了Nginx Ingress Controller。我发现在以下情况下可以重新加载我的Ingress:(点击此处查看) 下面是需要重新加载的场景列表:
  • 创建新的Ingress资源。
  • 向现有Ingress添加TLS部分。
  • Ingress注释更改影响到除上游配置之外的内容。例如,负载均衡注释不需要重新加载。
  • 从Ingress中添加/删除路径。
  • 删除Ingress、Service或Secret。
  • Ingress中某些缺失引用对象已可用,例如Service或Secret。
  • 更新Secret。
我的Ingress现在只使用HTTP流量,我想向现有的Ingress添加TLS部分。
因此,我的问题是:我应该采取什么措施来重新加载我的Ingress?
我无法在文档或其他地方找到任何信息。感谢您提供任何建议!
2个回答

7

我应该怎么样才能重新加载我的Ingress?

您只需要更新 Ingress,在您的情况下只需将TLS部分添加到现有的Ingress。

然后(自动地),Ingress 控制器应该找到差异(如 anemyte 在其答案中所说)并更新 Ingress。从现在起,您就可以使用 TLS。

一般来说,所有这些都应该自动完成。理论上,这也可以手动完成,尽管不推荐。在这个话题中有详细描述。


编辑:

我已经复现了这种情况。首先,我创建了一个简单的 Ingress,具体内容如下 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

在这一步中,我已经实现了工作中的入口(只有端口80是可用的,没有TLS)。然后我创建了 tls.yaml 文件用于启用TLS(我使用了自签名证书,你需要使用你自己的证书和域名):

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 已自动重新加载 :)


3

在所有情况下,您需要做的就是更新Ingress或相关资源(例如包含证书的密钥)。您从文档中引用的内容更多是应用程序的技术背景,换句话说:这是哪些情况下需要重新加载的原因。当控制器注意到与控制器相关联的资源发生更改时,它会自行执行实际的重新加载操作。您可以重新启动Pod(或在每个Pod中执行nginx -s reload)来强制进行更新,但根据我的经验,没有这样的要求。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接