Ingress — это объект Kubernetes, описывающий правила проксирования трафика от внешнего источника до сервисов внутри кластера K8S.
Самый простой вариант:
Идем вот сюда: https://kubernetes.github.io/ingress-nginx/deploy/#bare-metal-clusters
Там забираем актуальную ссылку на манифест и скачиваем манифест:
wget https://raw.githubusercontent.com/kubernetes/ingress-nginx/controller-v1.12.2/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