Я настраиваю свой кластер с помощью Kubespray в облаке Google: 1 мастер, 1 узел. Я запустил на нем приложение jenkins. Приложение не отображается в браузере, хотя все кажется правильным. Мой сервис и развертывание (скопировано из статьи в Интернете, чтобы я не вводил никаких потенциальных ошибок):
apiVersion: v1
kind: Service
metadata:
name: jenkins
spec:
type: NodePort
ports:
- port: 8080
targetPort: 8080
selector:
app: jenkins
---
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
name: jenkins
spec:
replicas: 1
template:
metadata:
labels:
app: jenkins
spec:
containers:
- name: jenkins
image: jenkins/jenkins
env:
- name: JAVA_OPTS
value: -Djenkins.install.runSetupWizard=false
ports:
- name: http-port
containerPort: 8080
- name: jnlp-port
containerPort: 50000
Все выглядит так, как и следовало ожидать. Запустите команду kubectl get pods и убедитесь, что она работает:
NAME READY STATUS RESTARTS AGE
jenkins-b64d4d96d-4vj48 1/1 Running 0 22m
Запустите kubectl get svc для порта узла:
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
jenkins NodePort 10.233.28.168 <none> 8080:31794/TCP 25m
kubernetes ClusterIP 10.233.0.1 <none> 443/TCP 11h
Если я захожу на <ip-адрес рабочего узла>: 31794, ничего не появляется. Я проверил порты на рабочем узле, я даже вручную открыл 30000-32767 на рабочем узле на всякий случай (запустив: sudo iptables -A INPUT -p tcp --dport 30000: 32767). Запустите sudo netstat -tulpn | grep LISTEN, чтобы убедиться, что nodeport 31794 открыт:
tcp6 0 0 :::10256 :::* LISTEN 9580/kube-proxy
tcp6 0 0 :::80 :::* LISTEN 1200/apache2
tcp6 0 0 :::31794 :::* LISTEN 9580/kube-proxy
tcp6 0 0 :::22 :::* LISTEN 1428/sshd
Итак, очевидно, что 31794 открыт на рабочем узле. Почему тогда я не могу получить доступ к jenkins в браузере? Вроде все в порядке.
ОБНОВИТЬ:
Я переделал его с типом балансировщика нагрузки. IP-адрес балансировщика нагрузки всегда находится в ожидании, поэтому я считаю, что внешняя сеть в моем кластере мертва. Этого не должно быть, поскольку я ввел сеть по умолчанию в моем скрипте terraform. Кто-нибудь знает, как к этому подойти?
ОБНОВЛЕНИЕ 2:
Повторно развернул кластер вручную без терраформирования, и все заработало, как обычно. Почему terraform нарушит мою сеть, если я указал правильную сеть (по умолчанию) в моем tf-коде?
Я исправил свою проблему. Я создал собственный сетевой тег в GCP с именем «nodeports» в диапазоне 30000-32767 и добавил его в свой код терраформы. Первоначально я не думал, что мне нужно это делать, так как я думал, что kubespray откроет для меня порты, и потому что порты были открыты, когда я тестировал их раньше.
Теперь я могу получить доступ к Дженкинсу в браузере.