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

Hal*_*_07 10 kubernetes nginx-ingress

我有一个 Kubernetes 集群(v.1.22),在其中部署了 Nginx 入口控制器。我发现我可以在几种情况下重新加载我的入口:下一个列表描述了需要重新加载的场景:

  • 创建了新的 Ingress 资源。
  • TLS 部分已添加到现有 Ingress。
  • Ingress 注释的更改不仅仅影响上游配置。例如,负载平衡注释不需要重新加载。
  • 从 Ingress 添加/删除路径。
  • Ingress、Service、Secret 被删除。
  • Ingress 中某些缺失的引用对象是可用的,例如服务或秘密。
  • 秘密已更新。

我的入口现在仅使用 HTTP 流量,我想将 TLS 部分添加到现有入口。

所以,我的问题是:我到底应该做什么来重新加载我的入口?

我在文档或其他地方找不到任何信息。任何建议表示赞赏!

Mik*_*iak 7

我到底应该做什么来重新加载我的入口?

您只需要更新入口,在您的情况下,您只需将 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
Run Code Online (Sandbox Code Playgroud)

然后我运行了kubectl get ingress,这是输出:

NAME    CLASS   HOSTS             ADDRESS        PORTS     AGE
ing-1   nginx   www.example.com   35.X.X.X       80        3m
Run Code Online (Sandbox Code Playgroud)

在此步骤中,我在没有 TLS 的情况下工作入口(仅工作端口 80)。然后我为 TLS 创建了 tls.yaml(我使用了自签名证书,您需要使用您的证书和域):

NAME    CLASS   HOSTS             ADDRESS        PORTS     AGE
ing-1   nginx   www.example.com   35.X.X.X       80        3m
Run Code Online (Sandbox Code Playgroud)

我跑过kubectl apply -f tls.yaml然后我改变ingress.yaml如下:

apiVersion: v1
kind: Secret
metadata:
  name: tls
data:
  tls.crt: |
    <my cert>
  tls.key: |
    <my key>
type: kubernetes.io/tls
Run Code Online (Sandbox Code Playgroud)

我添加了 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
Run Code Online (Sandbox Code Playgroud)

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
Run Code Online (Sandbox Code Playgroud)

Ingress 自动重新加载:)