1.3. fejezet, Ingress

Service külső elérése (expose deployment) helyett alkalmazható. NodePort használata helyett és LoadBalancer típus helyett belső szolgáltatást készítünk, és a külsö port továbbítást az Ingress végzi a szolgáltatás felé. Útvonal alapú proxy-ként is használható.

Kapcsolódó hivatkozások

Ingress-Nginx telepítése

ingress-nginx quick-start

helm upgrade --install ingress-nginx ingress-nginx \
  --repo https://kubernetes.github.io/ingress-nginx \
  --namespace ingress-nginx --create-namespace

dashboard-ingress

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: dashboard-ingress
  namespace: kubernetes-dashboard
spec:
  ingressClassName: nginx
  rules:
  - host: dashboard.me.local
    http:
      paths:
      - path: /
        pathType: Prefix  
        backend:
          service:
            name: kubernetes-dashboard
            port: 
              number: 80

IngressController pod végzi a vezérlését. Kiértékeli és feldolgozza az ingress szabályait, az átirányításokat menedzseli. Ajánlott az nginx ingress controller. Telepítése:

minikube addons enable ingress

Telepítés ellenőrzése:

kubectl get pods -n ingress-nginx
kubectl get ingress -n kubernetes-dashboard --watch
 
# böngészőben nyissuk meg a /etc/hosts fájlban is beállított címet 
http://dashboard.me.local

Útvonal és aldomain-ek proxy kiszolgálására is alkalmazható szabályok

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: dashboard-ingress
  namespace: kubernetes-dashboard
spec:
  ingressClassName: nginx
  rules:
  - host: dashboard.me.local
    http:
      paths:
      - path: /shopping
        pathType: Prefix  
        backend:
          service:
            name: shopping-service
            port: 
              number: 80
      - path: /test
        pathType: Prefix  
        backend:
          service:
            name: testing-service
            port: 
              number: 80
  - host: analytics.dashboard.me.local
    http:
      paths:
      - path: /
        pathType: Prefix  
        backend:
          service:
            name: analytics-service
            port: 
              number: 80

TLS beállítása HTTPS protokollhoz

apiVersion: v1
kind: Secret
metadata:
  name: myapp-secret-tls
  namespace: kubernetes-dashboard
data:
  tls.crt: # base64 encoded cert
  tls.key: # base64 encoded key
type: kubernetes.io/tls

A namespace legyen az ingress komponens névterével megegyező. Self-Signed TLS kulcs generálásáról ide kattintva találsz írást.

Secret parancssorból generálva

kubectl create secret tls tls-secret --namespace kubernetes-dashboard --key=cert/key.pem --cert=cert/cert.pem --dry-run=client -o=yaml > tls.yaml

Ingress konfigurálása a TLS kulcsok használatához:

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: dashboard-ingress
  namespace: kubernetes-dashboard
spec:
  tls:
  - hosts:
    - dashboard.me.local
    secretName: myapp-secret-tls
  ingressClassName: nginx
  rules:
  - host: dashboard.me.local
    http:
      paths:
      - path: /
        pathType: Prefix  
        backend:
          service:
            name: kubernetes-dashboard
            port: 
              number: 80