K8S 2: How to Access K8s Dashboard On Aws Ec2 Ubuntu

Muốn access vào k8s dashboard thì bạn có nhiều cách, bài này sẽ đưa ra vài cách, theo flow mà mình đã tìm hiểu trong những ngày đầu vọc k8s này

Table of Contents

Giới thiệu

Để vọc Kubernetes trên AWS, có nhiều cách:

cách 1 là dùng Service EKS của AWS, làm việc trên Console luôn, rất trực quan

cách 2 là dùng eksctl là CLI của AWS phát triển, nhiệm vụ tương tự như Service EKS, nhưng ta làm việc với nó trên CLI/terminal

cách 3 là tạo 1 EC2 Ubuntu 18.04 LTS (t2.medium trở lên), cài minikube lên nó, dựng 1 cluster

=> cách 1 và 2 khá tốn kém, nhưng bạn có thể dùng full service, gần với môi trường production nhất,
cách 3 thì rẻ hơn nhiều, các bạn chỉ tốn phí duy trì con EC2 Ubuntu thôi, tuy nhiên cách này chỉ nên dùng để vọc vạch, dùng “cho biết” thế nào là k8s thôi 😆

Bài này mình đang ở cách 3, và hướng dẫn cách để access vào k8s dashboard

Muốn access vào k8s dashboard thì bạn có nhiều cách, bài này sẽ đưa ra vài cách, theo flow mà mình đã tìm hiểu trong những ngày đầu vọc k8s này

Chuẩn bị

Trước tiên thì giống như bài trước, ta cần chuẩn bị AWS EC2 Ubuntu 18.04 LTS, t2.medium

install docker

sudo apt-get update && \
sudo apt-get install docker.io -y

tạo biến môi trường truyền vào thông tin của account Docker Hub của bạn

export DOCKER_USERNAME=AAAABBBB
export DOCKER_PASSWORD=CCCCDDDD
export DOCKER_USER_ID=AAAABBBB

Login vào Docker Hub với account và password của bạn

sudo docker login -u="$DOCKER_USERNAME" -p="$DOCKER_PASSWORD"

install kubectl

curl -LO https://storage.googleapis.com/kubernetes-release/release/$(curl -s https://storage.googleapis.com/kubernetes-release/release/stable.txt)/bin/linux/amd64/kubectl
chmod +x ./kubectl
sudo mv ./kubectl /usr/local/bin/kubectl

install minikube

curl -Lo minikube https://storage.googleapis.com/minikube/releases/latest/minikube-linux-amd64 && chmod +x minikube && sudo mv minikube /usr/local/bin/

check minikube version:

ubuntu@ip-172-31-17-59:~$ minikube version
minikube version: v1.5.2
commit: 792dbf92a1de583fcee76f8791cff12e0c9440ad-dirty

Start minikube lên, từ đây trở xuống sẽ switch sang user root

sudo -i
minikube start --vm-driver=none

Check status của minikube

root@ip-172-31-16-165:~# minikube status
host: Running
kubelet: Running
apiserver: Running
kubeconfig: Configured

Trạng thái khi vừa install minikube xong sẽ như sau:

ip-172-31-80-166:/home/ubuntu/k8s-mastery# kubectl get pods,svc -A
NAMESPACE     NAME                                   READY   STATUS    RESTARTS   AGE
kube-system   pod/coredns-5644d7b6d9-4vtz4           1/1     Running   0          115s
kube-system   pod/coredns-5644d7b6d9-svxqw           1/1     Running   0          115s
kube-system   pod/etcd-minikube                      1/1     Running   0          57s
kube-system   pod/kube-addon-manager-minikube        1/1     Running   0          42s
kube-system   pod/kube-apiserver-minikube            1/1     Running   0          54s
kube-system   pod/kube-controller-manager-minikube   1/1     Running   0          48s
kube-system   pod/kube-proxy-2bw77                   1/1     Running   0          115s
kube-system   pod/kube-scheduler-minikube            1/1     Running   0          66s
kube-system   pod/storage-provisioner                1/1     Running   0          112s

NAMESPACE     NAME                 TYPE        CLUSTER-IP   EXTERNAL-IP   PORT(S)                  AGE
default       service/kubernetes   ClusterIP   10.96.0.1    <none>        443/TCP                  2m4s
kube-system   service/kube-dns     ClusterIP   10.96.0.10   <none>        53/UDP,53/TCP,9153/TCP   2m2s
root@ip-172-31-80-166:/home/ubuntu/k8s-mastery# minikube service list
|-------------|------------|--------------|-----|
|  NAMESPACE  |    NAME    | TARGET PORT  | URL |
|-------------|------------|--------------|-----|
| default     | kubernetes | No node port |
| kube-system | kube-dns   | No node port |
|-------------|------------|--------------|-----|

Đến đây, mọi thứ đã giống với bài trước, muốn access vào k8s dashboard có 2 cách:

Cách 1: Dùng minikube dashboard

Câu lệnh minikube dashboard sẽ tạo ra 2 namespace mới như sau:
(quá trình chạy có thể phải chờ 1 lúc ko thấy lỗi gì ở phần Verifying proxy health … thì có thể Ctrl+C luôn)

ip-172-31-80-166:/home/ubuntu/k8s-mastery/resource-manifests# kubectl get pods,svc -A
NAMESPACE              NAME                                             READY   STATUS    RESTARTS   AGE
kube-system            pod/coredns-5644d7b6d9-4vtz4                     1/1     Running   0          9m55s
kube-system            pod/coredns-5644d7b6d9-svxqw                     1/1     Running   0          9m55s
kube-system            pod/etcd-minikube                                1/1     Running   0          8m57s
kube-system            pod/kube-addon-manager-minikube                  1/1     Running   0          8m42s
kube-system            pod/kube-apiserver-minikube                      1/1     Running   0          8m54s
kube-system            pod/kube-controller-manager-minikube             1/1     Running   0          8m48s
kube-system            pod/kube-proxy-2bw77                             1/1     Running   0          9m55s
kube-system            pod/kube-scheduler-minikube                      1/1     Running   0          9m6s
kube-system            pod/storage-provisioner                          1/1     Running   0          9m52s
kubernetes-dashboard   pod/dashboard-metrics-scraper-76585494d8-n67wm   1/1     Running   0          4m4s
kubernetes-dashboard   pod/kubernetes-dashboard-57f4cb4545-xzdfd        1/1     Running   0          4m4s

NAMESPACE              NAME                                TYPE        CLUSTER-IP       EXTERNAL-IP   PORT(S)                  AGE
default                service/kubernetes                  ClusterIP   10.96.0.1        <none>        443/TCP                  10m
kube-system            service/kube-dns                    ClusterIP   10.96.0.10       <none>        53/UDP,53/TCP,9153/TCP   10m
kubernetes-dashboard   service/dashboard-metrics-scraper   ClusterIP   10.98.238.240    <none>        8000/TCP                 4m10s
kubernetes-dashboard   service/kubernetes-dashboard        ClusterIP   10.102.179.238   <none>        80/TCP                   4m10s

Sau đó dùng port-forward để mở port 9090

kubectl port-forward -n kubernetes-dashboard service/kubernetes-dashboard 9090:80 --address 0.0.0.0

Nếu port-forward bị lỗi socat thì cần install socat apt-get install -y socat nữa, sau đó chạy lại command port-forward bên trên

Từ đây sẽ vào dc dashboard bình thường http://<EC2-PUBLIC-IP>:9090/,
như vậy là dùng minikube dashboard sẽ tạo dashboard rất nhanh
Cũng ko cần tạo admin-user hay ClusterRoleBinding gì cả,
Tuy nhiên cách này ko secure lắm,
vì cách này, trong serivce dashboard của minikube ko thể xóa cái flag –enable-skip-login được
các bạn có thể thử bằng command sau:

kubectl edit deployment kubernetes-dashboard -n kubernetes-dashboard
      containers:
      - args:
        - --namespace=kubernetes-dashboard
        - --enable-skip-login                   # <----xóa 2 dòng này hay 1 dòng đều ko ăn thua
        - --disable-settings-authorizer         # <----xóa 2 dòng này hay 1 dòng đều ko ăn thua

Cứ xóa đi nó lại tự tạo lại
xóa đi rồi thì khi port-forward thì vẫn vào dc dashoboard bình thường, không có secure gì cả
Còn 1 điểm nữa là: ban đầu mình tưởng có thể chỉ định 1 IP để open ở chỗ --address 0.0.0.0,
nhưng thực ra là ko thể chỉ định IP được, bắt buộc phải --address 0.0.0.0

ip-172-31-80-166:/home/ubuntu/k8s-mastery/resource-manifests# kubectl port-forward -n kubernetes-dashboard service/kubernetes-dashboard 9090:80 --address 219.117.237.243
Unable to listen on port 9090: Listeners failed to create with the following errors: [unable to create listener: Error listen tcp4 219.117.237.243:9090: bind: cannot assign requested address]
error: unable to listen on any of the requested ports: [{9090 9090}]

ip-172-31-80-166:/home/ubuntu/k8s-mastery/resource-manifests# kubectl port-forward -n kubernetes-dashboard service/kubernetes-dashboard 9090:80 --address 219.117.237.243/32
error: 219.117.237.243/32 is not a valid IP

Trong cách 1 này thì bạn có thể expose dashboard ra public bằng cách dùng port-forward hoặc dùng service type NodePort
Mình vừa giới thiệu ở phía trên là cách port-forward
Còn nếu dùng cách NodePort, chỉ nên dùng cho môi trường develop (theo link sau nói vậy)
https://github.com/kubernetes/dashboard/blob/master/docs/user/accessing-dashboard/1.7.x-and-above.md

Dùng command sau sửa type của Service tư ClusterIP thành NodePort

kubectl -n kubernetes-dashboard edit service kubernetes-dashboard  

Như log sau bạn có thể thấy Service đã thay đổi thành NodePort

ip-172-31-80-166:/home/ubuntu/k8s-mastery/resource-manifests# kubectl get pods,svc -A
NAMESPACE              NAME                                             READY   STATUS    RESTARTS   AGE
kube-system            pod/coredns-5644d7b6d9-4vtz4                     1/1     Running   0          30m
kube-system            pod/coredns-5644d7b6d9-svxqw                     1/1     Running   0          30m
kube-system            pod/etcd-minikube                                1/1     Running   0          29m
kube-system            pod/kube-addon-manager-minikube                  1/1     Running   0          28m
kube-system            pod/kube-apiserver-minikube                      1/1     Running   0          29m
kube-system            pod/kube-controller-manager-minikube             1/1     Running   0          29m
kube-system            pod/kube-proxy-2bw77                             1/1     Running   0          30m
kube-system            pod/kube-scheduler-minikube                      1/1     Running   0          29m
kube-system            pod/storage-provisioner                          1/1     Running   0          30m
kubernetes-dashboard   pod/dashboard-metrics-scraper-76585494d8-n67wm   1/1     Running   0          24m
kubernetes-dashboard   pod/kubernetes-dashboard-57f4cb4545-xzdfd        1/1     Running   0          24m

NAMESPACE              NAME                                TYPE        CLUSTER-IP       EXTERNAL-IP   PORT(S)                  AGE
default                service/kubernetes                  ClusterIP   10.96.0.1        <none>        443/TCP                  30m
kube-system            service/kube-dns                    ClusterIP   10.96.0.10       <none>        53/UDP,53/TCP,9153/TCP   30m
kubernetes-dashboard   service/dashboard-metrics-scraper   ClusterIP   10.98.238.240    <none>        8000/TCP                 24m
kubernetes-dashboard   service/kubernetes-dashboard        NodePort    10.102.179.238   <none>        80:32536/TCP             24m
root@ip-172-31-80-166:/home/ubuntu/k8s-mastery/resource-manifests# minikube service list
|----------------------|---------------------------|----------------------------|-----|
|      NAMESPACE       |           NAME            |        TARGET PORT         | URL |
|----------------------|---------------------------|----------------------------|-----|
| default              | kubernetes                | No node port               |
| kube-system          | kube-dns                  | No node port               |
| kubernetes-dashboard | dashboard-metrics-scraper | No node port               |
| kubernetes-dashboard | kubernetes-dashboard      | http://172.31.80.166:32536 |
|----------------------|---------------------------|----------------------------|-----|

Đến đây thì sẽ vào dc dashboard ở link http://<EC2-PUBLIC-IP>:32536

Tuy nhiên cả cách NodePort này cũng ko secure
Nó open to the world, ai cũng có thể access được

Nếu muốn chuyển lại từ NodePort về ClusterIP
thì bạn cần phải xóa hẳn cái service đó đi, minikube sẽ tự động tạo lại 1 cái service mới mặc định là ClusterIP
delete cái svc đang config NodePort đi bằng command sau:

kubectl delete svc kubernetes-dashboard -n kubernetes-dashboard

log như sau:

ip-172-31-80-166:/home/ubuntu/k8s-mastery/resource-manifests# kubectl get svc -A
NAMESPACE              NAME                        TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)                  AGE
default                kubernetes                  ClusterIP   10.96.0.1       <none>        443/TCP                  46m
kube-system            kube-dns                    ClusterIP   10.96.0.10      <none>        53/UDP,53/TCP,9153/TCP   46m
kubernetes-dashboard   dashboard-metrics-scraper   ClusterIP   10.98.238.240   <none>        8000/TCP                 40m
kubernetes-dashboard   kubernetes-dashboard        ClusterIP   10.99.59.17     <none>        80/TCP                   25s

=» Vậy là cách dùng minikube tạo dashboard chỉ có thế thôi, có ưu và nhược như vậy, mình không khuyên dùng cách 1 vì ko tùy biến được nhiều

Giờ nếu muốn Xóa cái minikube dashboard đi thì chỉ có cách là xóa hẳn cluster vm minikube đi thôi, buồn là vậy:

minikube stop; minikube delete
docker stop (docker ps -aq)
rm -r ~/.kube ~/.minikube
sudo rm /usr/local/bin/localkube /usr/local/bin/minikube
systemctl stop '*kubelet*.mount'
sudo rm -rf /etc/kubernetes/
docker system prune -af --volumes

Sau đó install lại kubectl và minikube như phía trên cùng nhé

Sau đó vào start lại thì sẽ thấy mất cái service dashboard

Cách 2: Tạo Dashboard từ file YAML

Cách này là tạo Dashboard from scratch luôn, bạn sẽ có thể tùy chỉnh được nhiều hơn

trước khi làm cách này thì nên xóa minikube triệt để đi, rồi tạo lại nhé
thử cái YAML thứ 1 Recommended:

$ kubectl apply -f https://raw.githubusercontent.com/kubernetes/dashboard/v1.10.1/src/deploy/recommended/kubernetes-dashboard.yaml

Nó sẽ tạo dashboard trong namespace kube-system
chú ý là nếu có sửa file để thay đổi namespace thì cũng sẽ apply fail thôi, nên ko nên sửa làm gì, mình đã thử rồi

ip-172-31-80-166:/home/ubuntu/k8s-mastery/resource-manifests# kubectl get pods,svc -A
NAMESPACE     NAME                                        READY   STATUS    RESTARTS   AGE
kube-system   pod/coredns-5644d7b6d9-m8ltq                1/1     Running   0          44m
kube-system   pod/coredns-5644d7b6d9-qqhqm                1/1     Running   0          44m
kube-system   pod/etcd-minikube                           1/1     Running   0          43m
kube-system   pod/kube-addon-manager-minikube             1/1     Running   0          43m
kube-system   pod/kube-apiserver-minikube                 1/1     Running   0          43m
kube-system   pod/kube-controller-manager-minikube        1/1     Running   0          43m
kube-system   pod/kube-proxy-mz6ns                        1/1     Running   0          44m
kube-system   pod/kube-scheduler-minikube                 1/1     Running   0          43m
kube-system   pod/kubernetes-dashboard-7c54d59f66-2k6cx   1/1     Running   0          30s
kube-system   pod/storage-provisioner                     1/1     Running   0          44m

NAMESPACE     NAME                           TYPE        CLUSTER-IP       EXTERNAL-IP   PORT(S)                  AGE
default       service/kubernetes             ClusterIP   10.96.0.1        <none>        443/TCP                  44m
kube-system   service/kube-dns               ClusterIP   10.96.0.10       <none>        53/UDP,53/TCP,9153/TCP   44m
kube-system   service/kubernetes-dashboard   ClusterIP   10.111.180.197   <none>        443/TCP                  30s

Giờ sẽ dùng port-forward

kubectl port-forward -n kube-system service/kubernetes-dashboard 8443:443 --address 0.0.0.0

nhưng sẽ bị lỗi:

ip-172-31-80-166:/home/ubuntu/k8s-mastery/resource-manifests# kubectl port-forward -n kube-system service/kubernetes-dashboard 8443:443 --address 0.0.0.0
Unable to listen on port 8443: Listeners failed to create with the following errors: [unable to create listener: Error listen tcp4 0.0.0.0:8443: bind: address already in use]
error: unable to listen on any of the requested ports: [{8443 8443}]

Do service mặc định đang để 8443:443 nên phải sửa thành port khác, 8443 thành 6443 chẳng hạn, bằng command sau:

kubectl edit service kubernetes-dashboard -n kube-system

Rồi lại port-forward lần nữa:

kubectl port-forward -n kube-system service/kubernetes-dashboard 6443:443 --address 0.0.0.0

tuy nhiên khi vào trình duyệt ở IP: http://54.209.126.239:6443/ thì vẫn ko đc, terminal có lỗi sau:

E1111 14:10:55.337284    7357 portforward.go:400] an error occurred forwarding 6443 -> 6443: error forwarding port 6443 to pod 230ca1a80532352a973c7da2136127da565232b93f98e76de1a60e0d63d5610e, uid : exit status 1: 2019/11/11 14:10:55 socat[8210] E connect(5, AF=2 127.0.0.1:6443, 16): Connection refused

Chịu luôn ko thể fix được lỗi connection refused này

Thế là mình đã từ bỏ và chuyển sang cái YAML thứ 2 Alternative

trước tiên phải delete cái config cũ đi

kubectl delete -f https://raw.githubusercontent.com/kubernetes/dashboard/v1.10.1/src/deploy/recommended/kubernetes-dashboard.yaml

Tạo cái dashboard bằng fiel YAML 2:

kubectl create -f https://raw.githubusercontent.com/kubernetes/dashboard/v2.0.0-beta5/aio/deploy/alternative.yaml

YAML này sẽ tạo ra dashboard ở trong namespace mới là kubernetes-dashboard

ip-172-31-80-166:/home/ubuntu/k8s-mastery/resource-manifests# kubectl get svc,pods -A
NAMESPACE              NAME                                TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)                  AGE
default                service/kubernetes                  ClusterIP   10.96.0.1       <none>        443/TCP                  68m
kube-system            service/kube-dns                    ClusterIP   10.96.0.10      <none>        53/UDP,53/TCP,9153/TCP   68m
kubernetes-dashboard   service/dashboard-metrics-scraper   ClusterIP   10.108.238.95   <none>        8000/TCP                 16s
kubernetes-dashboard   service/kubernetes-dashboard        ClusterIP   10.101.65.242   <none>        80/TCP                   16s

NAMESPACE              NAME                                             READY   STATUS    RESTARTS   AGE
kube-system            pod/coredns-5644d7b6d9-m8ltq                     1/1     Running   0          68m
kube-system            pod/coredns-5644d7b6d9-qqhqm                     1/1     Running   0          68m
kube-system            pod/etcd-minikube                                1/1     Running   0          67m
kube-system            pod/kube-addon-manager-minikube                  1/1     Running   0          67m
kube-system            pod/kube-apiserver-minikube                      1/1     Running   0          67m
kube-system            pod/kube-controller-manager-minikube             1/1     Running   0          67m
kube-system            pod/kube-proxy-mz6ns                             1/1     Running   0          68m
kube-system            pod/kube-scheduler-minikube                      1/1     Running   0          67m
kube-system            pod/storage-provisioner                          1/1     Running   0          68m
kubernetes-dashboard   pod/dashboard-metrics-scraper-76585494d8-5b5w9   1/1     Running   0          16s
kubernetes-dashboard   pod/kubernetes-dashboard-565564f797-sb2qg        1/1     Running   0          16s

sau đó thử port-forward để xem có login được không

kubectl port-forward -n kubernetes-dashboard service/kubernetes-dashboard 9090:80 --address 0.0.0.0

fix bằng cách sau:

kubectl create serviceaccount my-dashboard-sa -n kubernetes-dashboard
kubectl create clusterrolebinding my-dashboard-sa \
--clusterrole=cluster-admin \
--serviceaccount=kubernetes-dashboard:my-dashboard-sa
kubectl get secrets -n kubernetes-dashboard
ip-172-31-80-166:/home/ubuntu/k8s-mastery/resource-manifests# kubectl get secrets -n kubernetes-dashboard
NAME                               TYPE                                  DATA   AGE
default-token-w9sk5                kubernetes.io/service-account-token   3      8m40s
kubernetes-dashboard-csrf          Opaque                                1      8m40s
kubernetes-dashboard-key-holder    Opaque                                2      8m40s
kubernetes-dashboard-token-d7tt4   kubernetes.io/service-account-token   3      8m40s
my-dashboard-sa-token-tms9g        kubernetes.io/service-account-token   3      15s

lấy TOKEN bằng command sau:

kubectl describe secret  -n kubernetes-dashboard my-dashboard-sa-token-tms9g

dùng extension REQUESTLY của Chrome, link cài:
https://chrome.google.com/webstore/detail/requestly-redirect-url-mo/mdnleldcmiljblolnjhpnblkcekpdkpa config như hình sau, mỗi khi vào cái IP kia thì nó sẽ tự động modify Header và add thêm TOKEN vào cho mình

sau đó port-forward thì sẽ tự động login dc vào k8s dashboard

Tuy nhiên vào dashboard bị lỗi secrets is forbidden: User "system:serviceaccount:kubernetes-dashboard:kubernetes-dashboard" cannot list resource "secrets" in API group "" in the namespace "default"

nhưng phải sửa file YAML ClusterRole như sau mới full quyền:

nano dashboard-cluster-role-test.yaml
# 增加一些想要在dashboard上操作的資源
kind: ClusterRole
apiVersion: rbac.authorization.k8s.io/v1
metadata:
  labels:
    k8s-app: kubernetes-dashboard
  name: kubernetes-dashboard
rules:
 # Allow Metrics Scraper to get metrics from the Metrics server
  - apiGroups: ["","metrics.k8s.io"]
    resources: ["configmaps","pods", "nodes","namespaces","secrets","persistentvolumeclaims"]
    verbs: ["get", "list", "watch"]
  - apiGroups: ["","apps"]
    resources: ["statefulsets","replicationcontrollers", "ingresses","services","daemonsets","configmaps","pods", "nodes","namespaces","secrets","persistentvolumeclaims","replicasets","deployments","events"]
    verbs: ["get", "list", "watch"]
  - apiGroups: ["","extensions"]
    resources: ["ingresses"]
    verbs: ["get", "list", "watch"]
  - apiGroups: ["","batch"]
    resources: ["jobs", "cronjobs"]
    verbs: ["get", "list", "watch"]
  - apiGroups: ["","storage.k8s.io"]
    resources: ["storageclasses", "persistentvolumes"]
    verbs: ["get", "list", "watch"]
  - apiGroups: ["","rbac.authorization.k8s.io"]
    resources: ["clusterroles"]
    verbs: ["get", "list", "watch"]

Sau đó apply file ClusterRole vừa tạo:

kubectl apply -f dashboard-cluster-role-test.yaml

Bạn có thể sửa file alternative.yaml, thêm cái nội dung bên trên vào file thì khi apply chỉ cần apply file alternative.yaml thôi là đủ
Tuyệt vời!!, vậy là đã secure dc k8s dashboard bằng ServiceAccount Token: Authorization Bearer Token
Cách này hay ở chỗ bạn có thể tạo nhiều service account để giới hạn quyền của user
Tuy nhiên lại yêu cầu User phải dùng extension để modify Header bằng TOKEN

Còn 1 cách nữa là Dùng oauth2_proxy
Cách này thì “best secure”
https://blog.heptio.com/on-securing-the-kubernetes-dashboard-16b09b1b7aca
Cách này sẽ bắt User authen qua 1 bên thứ 3 ở đây là GitHub
thì User ko cần phải modify Header bằng Requestly như trên (có thời gian mình sẽ làm)

CREDIT

https://github.com/kubernetes/dashboard/blob/master/docs/user/installation.md
https://github.com/kubernetes/dashboard/blob/master/docs/user/accessing-dashboard/1.7.x-and-above.md
https://kknews.cc/code/56mvxx3.html
https://chrome.google.com/webstore/detail/requestly-redirect-url-mo/mdnleldcmiljblolnjhpnblkcekpdkpa
https://blog.heptio.com/on-securing-the-kubernetes-dashboard-16b09b1b7aca
https://unofficialism.info/posts/accessing-rbac-enabled-kubernetes-dashboard/

Thank You!

Your comment has been submitted. It will appear on this page shortly! OK

Yikes, Sorry!

Error occured. Couldn't submit your comment. Please try again. Thank You! OK

Leave a comment