
При поднятии Kubernetes на "голом железе" (Bare metal), а не на облачных решениях, где существуют LoadBalancer'ы, необходимо "открывать" Ingress "в мир" другими способами. В данной статье будет рассмотрен вариант с NodePort.
Будем считать, что сам Kubernetes уже установлен.
Данная команда необходимо не зависимо от среды развертывания:
kubectl apply -f https://raw.githubusercontent.com/kubernetes/ingress-nginx/master/deploy/mandatory.yaml
Далее предлагают установить Ingress и сам добавить NodePort:
kubectl apply -f https://raw.githubusercontent.com/kubernetes/ingress-nginx/master/deploy/provider/baremetal/service-nodeport.yaml
Но мы сами создадим yml файл и отредактируем его:
cat > ingress-nginx.yml << EOF
apiVersion: v1
kind: Service
metadata:
name: ingress-nginx
namespace: ingress-nginx
labels:
app.kubernetes.io/name: ingress-nginx
app.kubernetes.io/part-of: ingress-nginx
spec:
type: NodePort
ports:
- name: http
port: 80
targetPort: 80
protocol: TCP
- name: https
port: 443
targetPort: 443
protocol: TCP
externalIPs:
- 1.1.1.1
- 2.2.2.2
selector:
app.kubernetes.io/name: ingress-nginx
app.kubernetes.io/part-of: ingress-nginx
EOF
Где 1.1.1.1 и 2.2.2.2 — IP адреса work’еров Kubernetes’а, на которых будет работать Ingress.
Применяем:
kubectl apply -f ingress-nginx.yml
После этого, Ingress будет "слушать с мира" порты 80 и 443. LoadBalancer можно организовать при помощи DNS, к примеру при использование Cloudflare при указании нескольких записей "Type A" на один домен, будет по умолчанию работать RoundRobin.