簡體   English   中英

NodePort 是否適用於 Azure 容器服務 (Kubernetes)

[英]Does NodePort work on Azure Container Service (Kubernetes)

我為 Kubernetes 儀表板提供了以下服務

Name:               kubernetes-dashboard
Namespace:          kube-system
Labels:             k8s-app=kubernetes-dashboard
                    kubernetes.io/cluster-service=true
Annotations:        kubectl.kubernetes.io/last-applied-configuration={"kind":"Service","apiVersion":"v1","metadata":{"name":"kubernetes-dashboard","namespace":"kube-system","creationTimestamp":null,"labels":{"k8s-app":"k...
Selector:           k8s-app=kubernetes-dashboard
Type:               NodePort
IP:                 10.0.106.144
Port:               <unset> 80/TCP
NodePort:           <unset> 30177/TCP
Endpoints:          10.244.0.11:9090
Session Affinity:   None
Events:             <none>

根據文檔,我跑了

az acs kubernetes browse

它適用於http://localhost:8001/ui

但我也想在集群外訪問它。 描述輸出表明它是在端口 30177 上使用 NodePort 公開的。

但我無法在http://<any node IP>:30177上訪問它

眾所周知,將服務暴露給互聯網,我們可以使用nodeportLoadBalancer

據我所知,Azure 現在支持 nodeport 類型。

但我也想在集群外訪問它。

我們可以使用LoadBalancer重新創建 kubernetes 儀表板,這是我的步驟:

  1. 通過 kubernetes UI刪除kubernetes-dashboard:選擇Namespace to kube-system ,然后選擇services ,然后刪除它: 在此處輸入圖片說明 在此處輸入圖片說明

  2. 修改 Kubernetes-dashboard-service.yaml: SSH master VM,然后type 從 nodeport更改LoadBalancer

    root@k8s-master-47CAB7F6-0:/etc/kubernetes/addons# vi kubernetes-dashboard-service.yaml

     apiVersion: v1 kind: Service metadata: labels: kubernetes.io/cluster-service: "true" k8s-app: kubernetes-dashboard name: kubernetes-dashboard namespace: kube-system spec: ports: - port: 80 targetPort: 9090 selector: k8s-app: kubernetes-dashboard type: LoadBalancer
  3. 從 CLI 2.0啟動kubernetes 瀏覽:

    C:\\Users> az acs kubernetes browse -g k8s -n containerservice-k8s

然后通過 SSH 連接到主 VM 以檢查狀態 在此處輸入圖片說明

現在,我們可以通過公共 IP 地址來瀏覽 UI:

在此處輸入圖片說明 更新
下圖顯示了 azure 容器服務集群(Kubernetes)的架構,我們應該使用 Load-Balancer 將服務暴露給互聯網。

在此處輸入圖片說明

再想一想,這實際上是行不通的。 默認情況下,集群中唯一的公共 IP 用於主服務器上的負載均衡器。 並且該負載均衡器顯然沒有配置為轉發隨機端口(例如 30000-32767)。 此外,沒有一個節點直接擁有公共 IP,因此根據定義,NodePort 不會在集群外部工作。

您要完成這項工作的唯一方法是直接為節點提供公共 IP 地址。 出於各種原因,不鼓勵這樣做。

如果你只是想避免等待......那么我建議:

  1. 不要刪除服務。 大多數開發場景應該只是kubectl apply -f <directory>在這種情況下你真的不需要等待服務重新配置

  2. 將 Ingress 與 'nginx-ingress-controller' 一起使用,這樣您只需等待一次完整的 LB+NSG+PublicIP 配置,然后就可以在您的開發場景中添加/刪除 Ingress 對象。

  3. 開發場景使用minikube,或者手動給節點添加公網ip,讓NodePort場景工作。

您無法通過運行 kubectl Expose 命令通過 nodeport 公開服務,您會獲得集群所在子網范圍之外的 VIP 地址...相反,通過 yaml 文件部署服務,您可以指定內部負載平衡器作為一種類型...,它將為您提供主子網上的本地 IP,您可以通過內部網絡連接到該 IP...

或者,您可以使用外部負載均衡器公開服務並獲得公共 IP。 可在 www.

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM