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>
根据documentation,我运行
az acs kubernetes browse
并且适用于 http://localhost:8001/ui
但我也想在集群外访问它。 describe 输出表明它是在端口 30177 上使用 NodePort 公开的。
但我无法在 http://<any node IP>:30177
上访问它
众所周知,将服务暴露到互联网,我们可以使用nodeport
和LoadBalancer
。
据我所知,Azure 现在不 支持节点端口类型。
But I want to access it outside the cluster too.
我们可以使用 LoadBalancer
重新创建 kubernetes 仪表板,这是我的步骤:
删除 kubernetes-dashboard via kubernetes UI: select Namespace to kube-system,然后select services,然后删除:
修改 Kubernetes-dashboard-service.yaml: SSH master VM,然后 change type from nodeport to 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:\用户>az acs kubernetes browse -g k8s -n containerservice-k8s
然后通过 SSH 连接到主 VM 以检查状态:
现在,我们可以通过Public IP地址浏览UI:
更新:
下图展示了Azure容器服务集群(Kubernetes)的架构,我们应该使用Load-Balancer将服务暴露到互联网。
转念一想,这实际上是行不通的。默认情况下,集群中唯一的 public IP 用于主服务器上的负载均衡器。并且该负载均衡器显然未配置为转发随机端口(例如 30000-32767)。此外,none 个节点直接具有 public IP,因此根据定义,NodePort 不会在集群外部工作。
完成此工作的唯一方法是直接为节点提供 public IP 地址。出于各种原因不鼓励这样做。
如果你只是想避免等待...那么我建议:
不要删除服务。大多数开发方案应该只是 kubectl apply -f <directory>
,在这种情况下,您实际上不需要等待服务重新提供
将 Ingress 与 'nginx-ingress-controller' 一起使用,这样您只需要等待一次完整的 LB+NSG+PublicIP 配置,然后就可以 add/remove Ingress 对象在您的开发方案。
开发场景使用minikube,或者手动给节点添加publicips,让NodePort场景生效
您不能通过 运行 kubectl expose 命令通过 nodeport 公开服务,您会获得一个超出集群所在子网范围的 VIP 地址...相反,通过一个yaml 文件,您可以指定一个内部负载均衡器作为一种类型...,这将为您提供 Master 子网上的本地 IP,您可以通过内部网络连接到该 IP...
或者,您可以只使用外部负载均衡器公开服务并获得 public ip。可在 www.
我有以下 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
众所周知,将服务暴露到互联网,我们可以使用nodeport
和LoadBalancer
。
据我所知,Azure 现在不 支持节点端口类型。
But I want to access it outside the cluster too.
我们可以使用 LoadBalancer
重新创建 kubernetes 仪表板,这是我的步骤:
删除 kubernetes-dashboard via kubernetes UI: select Namespace to kube-system,然后select services,然后删除:
修改 Kubernetes-dashboard-service.yaml: SSH master VM,然后 change type from nodeport to 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:\用户>
az acs kubernetes browse -g k8s -n containerservice-k8s
然后通过 SSH 连接到主 VM 以检查状态:
现在,我们可以通过Public IP地址浏览UI:
下图展示了Azure容器服务集群(Kubernetes)的架构,我们应该使用Load-Balancer将服务暴露到互联网。
转念一想,这实际上是行不通的。默认情况下,集群中唯一的 public IP 用于主服务器上的负载均衡器。并且该负载均衡器显然未配置为转发随机端口(例如 30000-32767)。此外,none 个节点直接具有 public IP,因此根据定义,NodePort 不会在集群外部工作。
完成此工作的唯一方法是直接为节点提供 public IP 地址。出于各种原因不鼓励这样做。
如果你只是想避免等待...那么我建议:
不要删除服务。大多数开发方案应该只是
kubectl apply -f <directory>
,在这种情况下,您实际上不需要等待服务重新提供将 Ingress 与 'nginx-ingress-controller' 一起使用,这样您只需要等待一次完整的 LB+NSG+PublicIP 配置,然后就可以 add/remove Ingress 对象在您的开发方案。
开发场景使用minikube,或者手动给节点添加publicips,让NodePort场景生效
您不能通过 运行 kubectl expose 命令通过 nodeport 公开服务,您会获得一个超出集群所在子网范围的 VIP 地址...相反,通过一个yaml 文件,您可以指定一个内部负载均衡器作为一种类型...,这将为您提供 Master 子网上的本地 IP,您可以通过内部网络连接到该 IP...
或者,您可以只使用外部负载均衡器公开服务并获得 public ip。可在 www.