1

我为 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

但我也想在集群外访问它。describe 输出表明它是使用端口 30177 上的 NodePort 公开的。

但我无法访问它http://<any node IP>:30177

4

3 回答 3

9

众所周知,将服务公开到互联网,我们可以使用nodeportand LoadBalancer.

据我所知,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:\用户>az acs kubernetes browse -g k8s -n containerservice-k8s

然后 SSH 到主 VM 以检查状态在此处输入图像描述

现在,我们可以通过公共 IP 地址浏览 UI:

在此处输入图像描述 更新
下图显示了 azure 容器服务集群(Kubernetes)的架构,我们应该使用 Load-Balancer 将服务公开到互联网。

在此处输入图像描述

于 2017-04-17T04:38:14.797 回答
3

再三考虑,这实际上是行不通的。默认情况下,集群中唯一的公共 IP 用于主服务器上的负载均衡器。而且该负载均衡器显然未配置为转发随机端口(例如 30000-32767)。此外,没有一个节点直接拥有公共 IP,因此根据定义,NodePort 不会在集群外部工作。

完成这项工作的唯一方法是直接为节点提供公共 IP 地址。由于各种原因,不鼓励这样做。

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

  1. 不要删除服务。大多数开发场景应该只是kubectl apply -f <directory>在这种情况下,您实际上不需要等待服务重新配置

  2. 将 Ingress 与“nginx-ingress-controller”一起使用,这样您只需等待一次完整的 LB+NSG+PublicIP 配置,然后就可以在您的开发场景中添加/删除 Ingress 对象。

  3. 开发场景使用minikube,或者手动给节点添加公网ip,让NodePort场景工作。

于 2017-04-18T05:47:15.003 回答
0

您不能通过运行 kubectl expose 命令通过 nodeport 公开服务,您会获得一个超出集群所在子网范围的 VIP 地址......相反,通过 yaml 文件部署服务,您可以指定内部负载balancer 作为一种类型...,它将为您提供主子网上的本地 IP,您可以通过内部网络连接到该 IP...

或者,您可以使用外部负载均衡器公开服务并获取公共 IP。可在 www.

于 2017-11-27T17:01:49.053 回答