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

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 для nodeport:

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

Если я захожу на <worker node 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 в браузере? Вроде все в порядке.

решение1

В Serviceспецификации вы должны упомянуть type: LoadBalancerразрешение доступа из браузера. Когда вы это сделаете, вы увидите внешний ip, появляющийся в kubectl get svcвыводе.

Обратите внимание, что использование type: LoadBalancerвыставит ваше приложение в Интернет. Чтобы ограничить это, вы можете добавить список разрешенных IP-адресов с помощью параметра - loadBalancerSourceRanges. Ваше окончательное определение службы должно быть примерно таким:

apiVersion: v1
kind: Service
metadata:
  name: jenkins
spec:
  type: NodePort
  ports:
    - port: 8080
      targetPort: 8080
  selector:
    app: jenkins
  type: LoadBalancer
  # Restrict access to this LoadBalancer to the below ips
  loadBalancerSourceRanges:
  - 100.100.100.100/32
  - 1.1.1.2/32

Связанный контент