我为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
但是我也希望在集群外部访问它 . describe输出表明它是在端口30177上使用NodePort公开的 .
但是我无法在 http://<any node IP>:30177
上访问它
3 回答
我们知道,将服务公开给互联网,我们可以使用
nodeport
和LoadBalancer
.据我所知,Azure现在支持nodeport类型 .
我们可以使用
LoadBalancer
重新创建kubernetes仪表板,这里是我的stpes:root @ k8s-master-47CAB7F6-0:/ etc / kubernetes / addons #vi kubernetes-dashboard-service.yaml
C:\ Users>
az acs kubernetes browse -g k8s -n containerservice-k8s
然后SSH到主VM到 check the status :
现在,我们可以通过公共IP地址来浏览UI:
Update :
下图显示了azure容器服务集群(Kubernetes)的体系结构,我们应该使用Load Balancer将服务公开给Internet .
第二个想法,这实际上预计不起作用 . 默认情况下,群集中唯一的公共IP用于主服务器上的负载 balancer 器 . 并且该负载均衡器显然未配置为转发随机端口(例如30000-32767) . 此外,没有一个节点直接具有公共IP,因此根据定义,NodePort不会在集群外部工作 .
您要完成这项工作的唯一方法是直接为节点提供公共IP地址 . 出于各种原因,不鼓励这样做 .
如果你只是想避免等待......那么我建议:
不要删除服务 . 大多数开发方案应该只是
kubectl apply -f <directory>
,在这种情况下,您实际上不需要等待服务重新提供使用Ingress和'nginx-ingress-controller',这样您只需等待一次完整的LB NSG PublicIP配置,然后就可以在您的开发场景中添加/删除Ingress对象 .
使用minikube进行开发方案,或手动将公共ips添加到节点以使NodePort方案正常工作 .
您无法通过运行kubectl expose命令通过nodeport公开服务,您将获得群集所在子网范围之外的VIP地址...而是通过yaml文件部署服务,您可以指定内部负载 balancer 器作为类型...,它将为您提供主子网上的本地IP,您可以通过内部网络连接到该子网...
或者,您可以使用外部负载均衡器公开服务并获取公共IP . 可在www .