skip to Main Content

I’m new to Kubernetes and wanted to use the NGINX Ingress Controller for the project I’m currently working on. I read some of the docs and watched some tutorials but I haven’t really understood the:

Does anybody know of a blog post or tutorial that makes these things clear. Out of everything I’ve learned so far (both frontend and backend) developing and deploying to a cloud environment has got me lost. I’ve been stuck on a problem for a week and want to figure out it Ingress can help me.
Thanks!

2

Answers


  1. The most straightforward process of installing nginx ingress controller (or any other for that matter) would be using helm. This would need basic understanding of helm and how to work with helm charts.

    Here’s the repo: https://github.com/kubernetes/ingress-nginx/tree/master/charts/ingress-nginx

    Follow the instructions in there – quite straightforward if you use the default values. For the configuration, you can customize the chart too before installing. Look at the Readme to see how to get all the configurable options.

    Hope this helps as a starting point.

    Login or Signup to reply.
  2. Answering:

    How should I install nginx-ingress

    There is no one correct way to install nginx-ingress. Each way has its own advantages/disadvantages, each Kubernetes cluster could require different treatment (for example: cloud managed Kubernetes and minikube) and you will need to determine which option is best suited for you.

    You can choose from running:

    • $ kubectl apply -f ...,
    • $ helm install ...,
    • terraform apply ... (helm provider),
    • etc.

    How should I properly configure Ingress?

    Citing the official documentation:

    An API object that manages external access to the services in a cluster, typically HTTP.

    Kubernetes.io: Docs: Concepts: Services networking: Ingress

    Basically Ingress is a resource that tells your Ingress controller how it should handle specific HTTP/HTTPS traffic.

    Speaking specifically about the nginx-ingress, it’s entrypoint that your HTTP/HTTPS traffic should be sent to is a Service of type LoadBalancer named: ingress-nginx-controller (in a ingress-nginx namespace). In Docker with Kubernetes implementation it will bind to the localhost of your machine.

    apiVersion: networking.k8s.io/v1
    kind: Ingress
    metadata:
      name: minimal-ingress
    spec:
      ingressClassName: "nginx"
      rules:
      - http:
          paths:
          - path: /
            pathType: Prefix
            backend:
              service:
                name: nginx
                port:
                  number: 80
    

    The modified example from the documentation will tell your Ingress controller to pass the traffic with any Host and with path: / (every path) to a service named nginx on port 80.

    The above configuration after applying will be reflected by ingress-nginx in the /etc/nginx/nginx.conf file.

    A side note!

    Take a look on how the part of nginx.conf looks like when you apply above definition:

                    location / {
                           set $namespace      "default";
                           set $ingress_name   "minimal-ingress";
                           set $service_name   "nginx";
                           set $service_port   "80";
                           set $location_path  "/";
                           set $global_rate_limit_exceeding n;
    

    On how your specific Ingress manifest should look like you’ll need to consult the documentation of the software that you are trying to send your traffic to and ingress-nginx docs.


    Addressing the part:

    how to properly configure the Ingress. For example, the Kubernetes docs say to use a nginx.conf file (https://kubernetes.io/docs/tasks/access-application-cluster/connecting-frontend-backend/#creating-the-frontend) which is never mentioned in the actual NGINX docs. They say to use ConfigMaps or annotations.

    You typically don’t modify nginx.conf that the Ingress controller is using by yourself. You write an Ingress manifest and rest is taken by Ingress controller and Kubernetes. nginx.conf in the Pod responsible for routing (your Ingress controller) will reflect your Ingress manifests.

    Configmaps and Annotations can be used to modify/alter the configuration of your Ingress controller. With the Configmap you can say to enable gzip2 compression and with annotation you can say to use a specific rewrite.

    To make things clearer. The guide that is referenced here is a frontend Pod with nginx installed that passes the request to a backend. This example apart from using nginx and forwarding traffic is not connected with the actual Ingress. It will not acknowledge the Ingress resource and will not act accordingly to the manifest you’ve passed.

    A side note!

    Your traffic would be directed in a following manner (simplified):

    • Ingress controller -> frontend -> backend

    This example speaking from personal perspective is more of a guide how to connect frontend and backend and not about Ingress.


    Additional resources:

    The guide that I wrote some time ago should help you with the idea on how you can configure basic Ingress (it could be little outdated):

    Login or Signup to reply.
Please signup or login to give your own answer.
Back To Top
Search