При поднятии 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.