Search code examples
azurekubernetesazure-container-service

Does NodePort work on Azure Container Service (Kubernetes)


I have got the following service for Kubernetes dashboard

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>

According to the documentation, I ran

az acs kubernetes browse

and it works on http://localhost:8001/ui

But I want to access it outside the cluster too. The describe output says that it is exposed using NodePort on port 30177.

But I'm not able to access it on http://<any node IP>:30177


Solution

  • As we know, expose the service to internet, we can use nodeport and LoadBalancer.

    As far as I know, Azure does not support nodeport type now.

    But I want to access it outside the cluster too.

    we can use LoadBalancer to re-create the kubernetes dashboard, here are my steps:

    1. Delete kubernetes-dashboard via kubernetes UI: select Namespace to kube-system, then select services, then delete it: enter image description here enter image description here

    2. Modify Kubernetes-dashboard-service.yaml: SSH master VM, then 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
      
    3. start kubernetes browse from CLI 2.0:

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

    Then SSH to master VM to check the status: enter image description here

    Now, we can via the Public IP address to browse the UI:

    enter image description here Update:
    The following image shows the architecture of azure container service cluster(Kubernetes), we should use Load-Balancer to expose the service to internet.

    enter image description here