首页 文章

NodePort是否适用于Azure容器服务(Kubernetes)

提问于
浏览
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>

根据documentation,我跑了

az acs kubernetes browse

它适用于http://localhost:8001/ui

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

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

3 回答

  • 2

    我们知道,将服务公开给互联网,我们可以使用 nodeportLoadBalancer .

    据我所知,Azure现在支持nodeport类型 .

    但我也希望在集群外部访问它 .

    我们可以使用 LoadBalancer 重新创建kubernetes仪表板,这里是我的stpes:

    • Delete kubernetes-dashboard via kubernetes UI:选择 Namespacekube-system ,然后选择 services ,然后将其删除:
      enter image description here

    enter image description here

    • 修改kubernets-dashboard-service.yaml:SSH主虚拟机,然后 change 从节点端口输入到 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
    
    • start kubernetes从CLI 2.0浏览:

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

    然后SSH到主VM到 check the status
    enter image description here

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

    enter image description here
    Update
    下图显示了azure容器服务集群(Kubernetes)的体系结构,我们应该使用Load Balancer将服务公开给Internet .

    enter image description here

  • 6

    第二个想法,这实际上预计不起作用 . 默认情况下,群集中唯一的公共IP用于主服务器上的负载 balancer 器 . 并且该负载均衡器显然未配置为转发随机端口(例如30000-32767) . 此外,没有一个节点直接具有公共IP,因此根据定义,NodePort不会在集群外部工作 .

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

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

    • 不要删除服务 . 大多数开发方案应该只是 kubectl apply -f <directory> ,在这种情况下,您实际上不需要等待服务重新提供

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

    • 使用minikube进行开发方案,或手动将公共ips添加到节点以使NodePort方案正常工作 .

  • 0

    您无法通过运行kubectl expose命令通过nodeport公开服务,您将获得群集所在子网范围之外的VIP地址...而是通过yaml文件部署服务,您可以指定内部负载 balancer 器作为类型...,它将为您提供主子网上的本地IP,您可以通过内部网络连接到该子网...

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

相关问题