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?一切似乎都正常。

答案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

相关内容