我为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
答案 0 :(得分:6)
如我们所知,将服务公开给互联网,我们可以使用nodeport
和LoadBalancer
。
据我所知,Azure现在不支持nodeport类型。
但我也希望在集群外部访问它。
我们可以使用LoadBalancer
重新创建kubernetes仪表板,以下是我的表格:
修改kubernets-dashboard-service.yaml:SSH主虚拟机,然后更改类型从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
启动 kubernetes从CLI 2.0浏览:
C:\用户&GT; az acs kubernetes browse -g k8s -n containerservice-k8s
现在,我们可以通过公共IP地址浏览UI:
的更新强>:
下图显示了azure容器服务集群(Kubernetes)的体系结构,我们应该使用Load Balancer将服务公开给Internet。
答案 1 :(得分:2)
第二个想法,这实际上预计不起作用。默认情况下,群集中唯一的公共IP用于主服务器上的负载平衡器。并且该负载均衡器显然未配置为转发随机端口(例如30000-32767)。此外,没有一个节点直接拥有公共IP,因此根据定义,NodePort不会在集群外部工作。
您要完成这项工作的唯一方法是直接为节点提供公共IP地址。出于各种原因,不鼓励这样做。
如果你只是想避免等待......那么我建议:
请勿删除服务。大多数开发方案应该只是kubectl apply -f <directory>
,在这种情况下,您实际上不需要等待服务重新提供
将Ingress与'nginx-ingress-controller'一起使用,这样您只需要等待完整的LB + NSG + PublicIP配置一次,然后就可以在您的开发场景中添加/删除Ingress对象。 / p>
将minikube用于开发方案,或手动将公共ips添加到节点以使NodePort方案正常工作。