JimmyLiao

JimmyLiao blog: coffee, running, thinking

如何連到遠端的 MicroK8s 並用 K9S monitoring

2021-09-02 Kubernetes

如何連到遠端的 MicroK8s 並用 K9S 快快樂樂的管理 Kubernetes

使用 kubectl command 管理 Kubernetes Cluter 為工程師基本技能,用久了自然而然就想找些更適合習慣 Terminal 操作但又想有點 hacky 的介面,從強者同事分享的工具集才發現根本是超讚的東西阿!

前置作業: 大致上就是在 AWS 上面開個 EC2 instance,裝個 Ubuntu 20.04 Server Edition,其他就照 K9S 跟 MicroK8s 官網安裝。(秘技: 其實裝個 PrimeHub CE 照著步驟到 Quick Verification 也是更快的選項)

你應該可以 ssh 到這台 EC2,輸入 k9s

驗證在該台主機上可以透過 K9S 看到 Cluster 資訊沒問題!

接著來到這篇的主題:透過 laptop 連到遠端的主機

首先,你會發現即使你知道主機的 public IP,嘗試透過 ~/.kube/config 並放到 laptop 的 kube config

~$ cat ~/.kube/config
apiVersion: v1
clusters:
- cluster:
    certificate-authority-data: <YOUR_CERT_DATA>
    server: https://127.0.0.1:16443
  name: microk8s-cluster
contexts:
- context:
    cluster: microk8s-cluster
    user: admin
  name: microk8s
current-context: microk8s
kind: Config
preferences: {}
users:
- name: admin
  user:
    token: <YOUR_-_TOKEN>

修改對應的 server: https://<EC2_PUBLIC_IP>:16443 ,也打開 EC2 上的 16443 port

發現怎麼在打 kubectl get node 時找不到

Unable to connect to the server: x509: certificate is valid for 127.0.0.1, 10.152.183.1, 192.168.1.123, not <EC2_PUBLIC_IP>

記得先檢查 MicroK8s 的 metrics-server 有沒有 enabled。有 enabled 的話才不會在 K9S 上面看到 CPU/MEM 是 n/a

~$ microk8s status
microk8s is running
high-availability: no
  datastore master nodes: 127.0.0.1:19001
  datastore standby nodes: none
addons:
  enabled:
    dns                  # CoreDNS
    ha-cluster           # Configure high availability on the current node
    metrics-server       # K8s Metrics Server for API access to service metrics
    rbac                 # Role-Based Access Control for authorisation
    storage              # Storage class; allocates storage from host directory

然後找了一些文件,有一說是在kube-apiserver設定檔案,新增 --bind-address,像是這個這個。重啟 MicroK8s 之後沒什麼幫助。直到我找到 這篇,內容大意是說,像是 EC2 這種 instance 的 Public IP 並沒有實際在 network interface 指定,而是透過 EC2 方式給定一組 Public IP 指定給這個 instance,就需要在 /var/snap/microk8s/current/certs/csr.conf.template 裡面新增一個 IP

[ alt_names ]
DNS.1 = kubernetes
DNS.2 = kubernetes.default
DNS.3 = kubernetes.default.svc
DNS.4 = kubernetes.default.svc.cluster
DNS.5 = kubernetes.default.svc.cluster.local
IP.1 = 127.0.0.1
IP.2 = 10.152.183.1
IP.99 = <EC2_PUBLIC_IP>
#MOREIPS

記得這裡千萬別自認為要直接指定 IP.3 ,而是要指定從 IP.100 或是往下遞減,這邊先給個 IP.99

改好並 restart microk8s 之後就可以遠端執行 kubectl 啦!

~$ kubectl get node
NAME            STATUS   ROLES    AGE    VERSION
ip-10-40-0-11   Ready    <none>   4d1h   v1.19.13-34+939585d5fb6fa7

然後就可以快快樂樂的在 laptop 直接監控 Cluster 囉~

comments powered by Disqus