Назад | Перейти на главную страницу

Kubernetes - приложение не отображается в браузере

Я настраиваю свой кластер с помощью 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 откроет для меня порты, и потому что порты были открыты, когда я тестировал их раньше.

Теперь я могу получить доступ к Дженкинсу в браузере.