unable to edit nginx.conf file from K8 cluster

1/7/2022

I want to edit my Nginx.conf file present inside Nginx controller pod in AKS, but the edit command is not working using the exec command, is there any way else I could edit my nginx.conf.

the command which I tried:

kubectl exec -it nginx-nginx-ingress-controller -n nginx --  cat /etc/nginx/nginx.conf
-- Rughma Sussan Renji
azure-aks
kubernetes
nginx
nginx-config
nginx-ingress

4 Answers

1/7/2022

Generally, it is a bad idea to exec into a pod to do changes. It violates the principle of infrastructure as code. You should extract the nginx.conf file to a ConfigMap and then mount it into the pod.

An example can be found here.

You can then edit the ConfigMap when needing to update the nginx config. Remember to redeploy the Pod to make the config apply.

-- CrowDev
Source: StackOverflow

2/28/2022

I read from the official you are able to configure or modify the nginx.conf through annotation or configmap.

what you need is to modify your ingress file. first, check your ingress by

kubectl get ingress -A

you will see your ingress there, how did you create the ingress? of course, you execute the ingress file which is the YAML file. now you need to edit the file and add some annotation annotation or confgimap

-- newcomers
Source: StackOverflow

1/8/2022

yh, seems this is also working. tried an alternative way:

Edit/add the properties to change in ingress.yaml and redeploy it. the changes will then reflect in nginx.conf

-- Rughma Sussan Renji
Source: StackOverflow

2/3/2022

As mentioned by CrowDev, it's not good practice to update the config of Nginx controller like that.

Nginx controller is the backend of the ingress you can use the config map to update the configuration of the Nginx controller and redeploy the pod of the controller.

Some of the Nginx controller config could be also overwritten using the ingress config and annotation inside it.

You can read more about annotation here : https://docs.nginx.com/nginx-ingress-controller/configuration/ingress-resources/advanced-configuration-with-annotations/

Update :

You can separate out different ingress by their name. if you want to manage different configs or headers you need to separate out ingress for managing different configs.

Example :

ingress : 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

ingress : 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

now nginx.ingress.kubernetes.io/proxy-read-timeout: "3600" will get apply to only one ingress or service.

-- Harsh Manvar
Source: StackOverflow