前兩天的文章建立了 Teleport Auth, Proxy 以及 Kube Agent,已經可以透過 tsh 連接進入 GKE Cluster,今天要介紹 Teleport Application Access,很適合管理因為資安考量,只允許開放內部訪問的網頁,以及結合 Lens 這個強大的 K8s 的 IDE,無需再通過 Kubectl 指令操縱 K8s 集群,讓我們開始吧!
Lens 是一款開源的 Kubernetes IDE,它提供直觀易用的圖形界面,簡化了 Kubernetes 集群和應用程序的管理。通過 Lens,用戶可以輕松查看集群資源、實時監控應用程序性能、調試問題、管理應用程序部署以及訪問 Kubernetes 文檔。其強大的功能和友好的用戶體驗,使 Lens 成為全球開發者和運維人員管理 Kubernetes 的首選工具。
從 Lens 6 開始,有兩個訂閱許可證可用:
從 Lens 網站下載安裝程式。該網站將為您的系統(Mac、Windows 或 Linux)建議適當的下載,但您可以從下載按鈕下拉清單中選擇替代安裝程式。
運行安裝程式並打開 Lens。當您第一次打開應用程式時,它會提示您輸入 Len ID。
請選擇 Lens ID,創建一個 Lens ID
需要驗證您的電子郵件,然後選擇 Add Lens Subscription(添加 Lens 訂閱)。
選擇 Lens Personal 或 Lens Pro 訂閱(提供 Lens Pro 的 30 天免費試用。)
選擇 Open Lens Desktop 以打開 Lens。該應用程式將檢查更新,然後您就可以開始使用了。
Lens 安裝好了以後,就可以開始示範 Teleport Kube Agent
上一篇文章已經在 demo2-cluster GKE 集群安裝了 Kube Agent,請讀者按照昨天的步驟再連接到另一個 GKE 集群,以下示範需要使用到。
綁定成功後會看到兩個以上不同的 Kubernets 叢集
我們先使用 tsh 指令登入 ithome-202409-demo-2_demo2-cluster 這個叢集
再使用 tsh kube login cicd-cluster
指令登入另一個 cicd-cluster 叢集
cat ${HOME?}/teleport-kubeconfig.yaml
可以看到兩個叢集的 kubeconfig 都出現了,查看其 yaml 檔案,會發現 clusters.cluster.server 會是 teleport 的網址:3026
如下
apiVersion: v1
clusters:
- cluster:
server: https://teleport的網址:3026
進入 Catalog 頁面,會發現剛剛使用 Teleport 連接的這兩個叢集都出現了,將其釘選至左側選單,點擊 Connect 連接進入 K8s 集群
會發現 Worker Node 已經可以看到了,但是其 CPU 及 Memory 並沒有顯示出來,接下來幫兩個集群快速安裝 Lens Prometheus,點擊左上角此叢集旁邊的 ▼ 符號,再點擊 Setting。
進入 Lens Metrics 將這三個都打開,如果讀者的叢集已經安裝了 Prometheus 可以跳過此步驟。
進入 Metrics 頁面,選擇 Auto Detect Promtheus ,如果抓不到 Prometheus,可以自行輸入 Prometheus 地址 (<namespace>/<service>:<port>
),例如,Lens 安裝的 Prometheus 為 lens-metrics/prometheus:80
進入 Node 頁面,可以看到當下的 CPU 及 Memory 都可以看得到了。
注意:如果使用的是 AWS EKS 可以抓到正確的 Disk 使用量,但是使用 GCP GKE 的話會抓不到。
點選左側選單,可以快速切換集群,而無需透過 kubectl 指令切換 Current Context,可以很方便地同時管理多個集群。
CMD+SHIFT+E
)。@nevalla/kube-resource-map
。安裝完後可以看到 K8s 中各個組件關聯性,我使用 apisix-ingress-controller 來示範
可以看到和 Deployment: apisix-ingress-controller 相關的各種組件關係圖,如果服務有問題時,可以快速地進行排查。
以下演示如何配置通過 Teleport 對應用程式的安全訪問。使用 Grafana 及剛剛使用 Lens 安裝的 Prometheus 作為範例應用程式,因為 Kubernetes 集群中安裝和運行非常簡單無需額外配置。
按照以下 Helm 說明安裝 Grafana,則可以在 Kubernetes 集群中使用以下網址訪問它(http://example-grafana.example-grafana.svc.cluster.local
)
$ helm repo add grafana https://grafana.github.io/helm-charts
$ helm repo update
$ helm install example-grafana grafana/grafana --create-namespace --n example-grafana
接下來,修改昨天創建的 teleport-kube-agent values.yaml
roles: "kube,app"
proxyAddr: "teleport.demoit.shop:443"
apps:
- name: demo2-cluster-prometheus
uri: http://prometheus.lens-metrics.svc:80
labels:
app: "prometheus"
env: demo2-cluster
- name: demo2-cluster-grafana
uri: http://example-grafana.example-grafana.svc.cluster.local
labels:
app: "grafana"
env: demo2-cluster
修改 DNS,將 *.teleport.demoit.shop
使用和 teleport.demoit.shop
一樣的 A 紀錄
$ gcloud dns --project=$PROJECT_NAME record-sets create *.teleport.demoit.shop. --zone=$CLOUD_DNS_區域名稱 --type="A" --ttl="300" --rrdatas=$A_RECORD_IP
設定 Teleport Role 要和 APPS 的 Labels 有吻合的 spec.allow.app_labels,換句話說,可以使用不同的 labels 來控制各個 Role 的訪問權限。
進到 Teleport Web 首頁,可以看到剛剛創建的 APP 出現了,點擊 Grafana 右側的 Launch 連接。
可以看到他是透過 Teleport 的網址加上前綴進行跳板轉導到 K8s 內部的服務,所以剛剛的 DNS 才需要設定成 *.teleport.demoit.shop
通配符,證書也不會有問題。
Lens 和 Teleport 為開發者和管理員提供了簡化的應用程式訪問解決方案。Lens 作為 Kubernetes IDE,提供直觀的界面來管理和監控 Kubernetes 集群,並通過其內置的 kubectl 插件簡化了應用程式的訪問。Teleport 則專注於 Kubernetes 及 Application ****的安全訪問控制,提供基於身分驗證的訪問管理、審計日誌和會話錄製等功能,確保只有授權用戶才能訪問敏感應用程式。
筆者使用3天的時間來介紹 Teleport,但是這只是 Teleport 的冰山一角而已,它還有非常多強大的功能,例如,透過多重身份驗證登入、派發臨時金鑰、連接各類 DB、取代堡壘主機等,如果讀者想要更近一步認識 Teleport,可以到官方網頁查詢更多的設定方法,那裡的文件都寫得非常完整。