无法从 K8 集群编辑 nginx.conf 文件

unable to edit nginx.conf file from K8 cluster

我想编辑 AKS 中 Nginx 控制器 pod 中的 Nginx.conf 文件,但是使用 exec 命令编辑命令不起作用,还有什么其他方法可以编辑我的 nginx.conf .

我试过的命令:

kubectl exec -it nginx-nginx-ingress-controller -n nginx --  cat /etc/nginx/nginx.conf

通常,执行到 pod 中进行更改是个坏主意。它违反了基础架构即代码的原则。您应该将 nginx.conf 文件提取到 ConfigMap,然后将其挂载到 pod 中。

可以找到示例 here

您可以在需要更新 nginx 配置时编辑 ConfigMap。请记住重新部署 Pod 以使配置生效。

yh,看来这也行得通。尝试了另一种方法:

Edit/add 要在 ingress.yaml 中更改的属性并重新部署它。然后更改将反映在 nginx.conf

正如 CrowDev 所提到的,像这样更新 Nginx 控制器的配置并不是一个好习惯。

Nginx controller 是 ingress 的后端你可以使用 config map 来更新 Nginx controller 的配置并重新部署控制器的 pod。

一些 Nginx 控制器 配置也可以使用其中的入口配置和注释覆盖。

您可以在此处阅读有关注释的更多信息:https://docs.nginx.com/nginx-ingress-controller/configuration/ingress-resources/advanced-configuration-with-annotations/

更新 :

您可以通过 名称 来区分不同的入口。如果您想管理不同的配置或 headers 您需要分离出入口以管理不同的配置。

示例:

入口:1

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: ingress-one
  annotations:
    kubernetes.io/ingress.class: nginx
    nginx.ingress.kubernetes.io/rewrite-target: /
    nginx.ingress.kubernetes.io/proxy-read-timeout: "3600"
spec:
  rules:
  - http:
      paths:
      - path: /one
        pathType: Prefix
        backend:
          service:
            name: one
            port:
              number: 80

入口:2

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: ingress-two
  annotations:
    kubernetes.io/ingress.class: nginx
    nginx.ingress.kubernetes.io/rewrite-target: /
spec:
  rules:
  - http:
      paths:
      - path: /two
        pathType: Prefix
        backend:
          service:
            name: two
            port:
              number: 80

现在 nginx.ingress.kubernetes.io/proxy-read-timeout: "3600" 将只应用于一个入口或服务。

我从官方了解到,您可以通过注释或配置映射来配置或修改nginx.conf。

您需要修改您的入口文件。首先,通过

检查你的入口
kubectl get ingress -A

你会在那里看到你的入口,你是如何创建入口的?当然,您执行的是 YAML 文件的入口文件。现在您需要编辑文件并添加一些注释 annotation or confgimap