Создание службы Ingress и ClusterIP

Делаю:
21.11.2021


Блин, все меняется от версии к версии, не успеваю конфиги переписывать! Последний раз когда копал, оказалось, что работает со следующими аннотациями, что у меня в примере, а с теми, что в примерах на оф. сайте с версией v1.22.1 не работает. (При обращение по адресу nodejs-cats-app.example.com page-not-found). Какие аннотации обязательные, какие нет, сейчас сказать не могу.


Deployment уже создан как здесь


Создаю сервис ClusterIP


$ cat << 'EOF' | kubectl apply -f -
apiVersion: v1
kind: Service
metadata:
  name: nodejs-cats-app-cluster-ip
spec:
  type: ClusterIP
  ports:
  - port: 80
    targetPort: 8080
  selector:
    app: nodejs-cats-app
EOF


Включение функционала Ingress в Minikube


$ minikube --profile marley-minikube addons list
- ingress: disabled

// Включение функционала Ingress в Minikube
$ minikube addons --profile marley-minikube enable ingress

$ kubectl get po --all-namespaces | grep ingress-nginx-controller
ingress-nginx          ingress-nginx-controller-69bdbc4d57-zxn77    1/1     Running     0             45m

$ kubectl get pods -n ingress-nginx


NAME                                        READY   STATUS      RESTARTS   AGE
ingress-nginx-admission-create--1-xk4ww     0/1     Completed   0          76m
ingress-nginx-admission-patch--1-skvq6      0/1     Completed   1          76m
ingress-nginx-controller-69bdbc4d57-zxn77   1/1     Running     0          76m


Запускаем приложение


$ kubectl get service nodejs-cats-app-cluster-ip
NAME                         TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)   AGE
nodejs-cats-app-cluster-ip   ClusterIP   10.101.76.157   <none>        80/TCP    21s


$ cat << 'EOF' | kubectl apply -f -
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: nodejs-cats-app-ingress
  annotations:
    nginx.ingress.kubernetes.io/default-backend: ingress-nginx-controller
    kubernetes.io/ingress.class: nginx
    ## tells ingress to check for regex in the config file
    nginx.ingress.kubernetes.io/use-regex: "true"
spec:
  rules:
  - host: nodejs-cats-app.example.com
    http:
      paths:
      - path: /
        pathType: Prefix
        backend:
          service:
            name: nodejs-cats-app-cluster-ip
            port:
              number: 80
EOF


$ kubectl get ingresses
NAME                      HOSTS                         ADDRESS   PORTS   AGE
nodejs-cats-app-ingress   nodejs-cats-app.example.com             80      23s


// Для minikube
$ minikube --profile marley-minikube ip
192.168.49.2

// В других случая прописать IP из ADDRESS


$ sudo vi /etc/hosts

192.168.49.2 nodejs-cats-app.example.com


Подключаемся по адресу:

http://nodejs-cats-app.example.com


OK!


// Удалить ingress
$ kubectl delete ingress nodejs-cats-app-ingress

// И остальное
$ kubectl delete svc nodejs-cats-app-cluster-ip
$ kubectl delete deployment nodejs-cats-app


Debug

$ kubectl describe ingress nodejs-cats-app-ingress


Дополнительно

https://kubernetes.io/docs/tasks/access-application-cluster/ingress-minikube/


Тоже самое но с использованием nip.io


nip.io позволит не заморачиваться на добавлении всяких DNS, hosts etc.


$ cat << 'EOF' | kubectl apply -f -
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: nodejs-cats-app-ingress
  annotations:
    nginx.ingress.kubernetes.io/default-backend: ingress-nginx-controller
    kubernetes.io/ingress.class: nginx
    ## tells ingress to check for regex in the config file
    nginx.ingress.kubernetes.io/use-regex: "true"
spec:
  rules:
  - host: 192.168.49.2.nip.io
    http:
      paths:
      - path: /
        pathType: Prefix
        backend:
          service:
            name: nodejs-cats-app-cluster-ip
            port:
              number: 80
EOF


$ kubectl get ingresses
NAME                      CLASS    HOSTS                 ADDRESS   PORTS   AGE
nodejs-cats-app-ingress   <none>   192.168.49.2.nip.io             80      8s


// [OK!]
http://192.168.49.2.nip.io/