Kubernetes - 應用程式未顯示在瀏覽器中

Kubernetes - 應用程式未顯示在瀏覽器中

我在谷歌雲端上使用 Kubespray 設定了自己的叢集:1 個主節點,1 個節點。我在上面啟動了一個詹金斯應用程式。即使一切看起來都是正確的,該應用程式也不會顯示在瀏覽器中。我的服務和部署(從互聯網上的文章複製,這樣我就不會引入任何潛在的錯誤):

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

如果我訪問 <worker node 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允許從瀏覽器存取。當您執行此操作時,您將在kubectl get svc輸出中看到外部 IP 。

請注意,使用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

相關內容