Nginx Ingress

Installation

Use the compatible version with your Kubernetes cluster, otherwise, you may get some unexpected exception or error.

kubectl apply -f https://raw.githubusercontent.com/kubernetes/ingress-nginx/controller-v1.1.3/deploy/static/provider/baremetal/deploy.yaml

Make sure pod ingress-nginx-controller-xxxx is running, otherwise using 'kubectl -n ingress-nginx get ingressclasses' and check the 'Event' part.

This YAML will create a new namespace 'ingress-nginx' for Nginx, and an Ingress Class object 'nginx' will be created too by default, you could check from Kubernetes dashboard or the CLI below

kubectl get ingressclasses -n ingress-nginx

If this is only instance of the Ingresss-NGINX controller, you should add the annotation ingressclass.kubernetes.io/is-default-class in your ingress class:

kubectl -n ingress-nginx annotate ingressclasses nginx ingressclass.kubernetes.io/is-default-class="true"

Verification

kubectl get services -n ingress-nginx

Get the <ingress-nginx-node-port> of ingress-nginx-controller

Get node <external IP> with the following command

kubectl get nodes -o wide

Access http://<external IP>:<ingress-nginx-node-port> in the browser, and you will get "404 Not Found" from nginx, no worry, that is because no backend service configured yet. If you are using docker desktop kubenetes, the <external IP> will be localhost. 

Now we deploy a nginx service with the following YAML to test the ingress controller,

apiVersion: v1
kind: Pod
metadata:
  name: nginx
  labels:
    app: nginx
spec:
  containers:
    - name: nginx
      image: nginx:1.18.0
---
apiVersion: v1
kind: Service
metadata:
  name: nginx
spec:
  ports:
    - port: 80
      targetPort: 80
  selector:
    app: nginx
---
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: example.com
  annotations:
    nginx.ingress.kubernetes.io/rewrite-target: /
spec:
  ingressClassName: nginx
  rules:
    - host: nginx.example.com
      http:
        paths:
          - path: /
            pathType: Prefix
            backend:
              service:
                name: nginx
                port: 
                  number: 80

 Use the following command to check the availability.

curl --location 'http://<external IP>:<ingress-nginx-node-port>' --header 'Host: nginx.example.com'

If you aren't familiar with curl, you can use Postmen, it; 's more straightforward. If you want to verify in a browser, for example, chrome, then you need to use some plugin like ModHeader to provide the header parameter. 

posted @ 2023-12-22 17:08  TigerLu  阅读(30)  评论(0编辑  收藏  举报