Kubernetes - 应用程序未显示在浏览器中

Kubernetes - 应用程序未显示在浏览器中

我在 google cloud 上使用 Kubespray 设置了自己的集群: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 以验证节点端口 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 代码中指定了正确的网络(默认),为什么 terraform 会破坏我的网络?

答案1

我修复了我的问题。我在 GCP 中创建了一个名为“nodeports”的自定义网络标签,范围为 30000-32767,并将其添加到我的 terraform 代码中。我最初认为我不需要这样做,因为我认为 kubespray 会为我打开端口,而且我之前测试时端口是打开的。

我现在可以通过浏览器访问 Jenkins。

相关内容