Ingress — это объект Kubernetes, описывающий правила проксирования трафика от внешнего источника до сервисов внутри кластера K8S.
Самый простой вариант:
Идем вот сюда: https://kubernetes.github.io/ingress-nginx/deploy/#bare-metal-clusters
Там забираем актуальную ссылку на манифест и скачиваем манифест:
wget https://raw.githubusercontent.com/kubernetes/ingress-nginx/controller-v1.12.0-beta.0/deploy/static/provider/baremetal/deploy.yaml
Если у нас уже установлен PureLB или MetalLB, то логично использовать load-balancer для получения адреса.
Поправим манифест:
Ищем в файле Service у которого type: NodePort и меняем на type: LoadBalancer
По другому, это можно сделать так:
sed s/NodePort/LoadBalancer/ -i deploy.yaml
После этого, применяем манифест:
kubectl apply -f deploy.yaml
Посмотрим, какой внешний ip (EXTERNAL-IP) выдал load-balancer нашему ingress-controller-у:
kubectl -n ingress-nginx get svc
NAME | TYPE | CLUSTER-IP | EXTERNAL-IP | PORT(S) | AGE |
---|---|---|---|---|---|
ingress-nginx-controller | LoadBalancer | 10.110.58.41 | 192.168.254.231 | 80:31455/TCP,443:32265/TCP | 1m |
ingress-nginx-controller-admission | ClusterIP | 10.107.252.6 | <none> | 443/TCP | 1m |
Ну и проверим работу ingress-controller-а:
Создадим манифест в файле test.yaml
--- apiVersion: v1 kind: Namespace metadata: name: test --- apiVersion: apps/v1 kind: ReplicaSet metadata: name: rs-nodeport namespace: test spec: replicas: 3 selector: matchLabels: app: nginx-rs template: metadata: name: nginx-ss labels: app: nginx-rs spec: containers: - name: nginx-container image: nginxdemos/nginx-hello:plain-text ports: - name: http containerPort: 8080 protocol: TCP --- apiVersion: v1 kind: Service metadata: name: ng-nodeport namespace: test spec: type: ClusterIP ports: - name: name-np port: 80 targetPort: 8080 selector: app: nginx-rs --- apiVersion: networking.k8s.io/v1 kind: Ingress metadata: name: minimal-ingress namespace: test spec: ingressClassName: nginx rules: - http: paths: - path: / pathType: Prefix backend: service: name: ng-nodeport port: number: 8080
Применим созданный манифест:
kubectl apply -f test.yaml
Проверим, что все это работает:
curl http://192.168.254.231
Теперь создадим возможность контейнерам сохранять файлы при помощи NFS CSI драйвер для Kubernetes