iT邦幫忙

2024 iThome 鐵人賽

DAY 16
0
Kubernetes

異世界生存戰記:30天煉成GKE大師系列 第 16

Day16 Kubernetes 安全遠程操控術(三):Teleport 結合 Lens 的複合魔法

  • 分享至 

  • xImage
  •  

https://ithelp.ithome.com.tw/upload/images/20240930/201690173026h8jpU6.png

前言

前兩天的文章建立了 Teleport Auth, Proxy 以及 Kube Agent,已經可以透過 tsh 連接進入 GKE Cluster,今天要介紹 Teleport Application Access,很適合管理因為資安考量,只允許開放內部訪問的網頁,以及結合 Lens 這個強大的 K8s 的 IDE,無需再通過 Kubectl 指令操縱 K8s 集群,讓我們開始吧!

Lens

https://ithelp.ithome.com.tw/upload/images/20240930/20169017HnEM8117ly.jpg

Lens 簡介

Lens 是一款開源的 Kubernetes IDE,它提供直觀易用的圖形界面,簡化了 Kubernetes 集群和應用程序的管理。通過 Lens,用戶可以輕松查看集群資源、實時監控應用程序性能、調試問題、管理應用程序部署以及訪問 Kubernetes 文檔。其強大的功能和友好的用戶體驗,使 Lens 成為全球開發者和運維人員管理 Kubernetes 的首選工具。

從 Lens 6 開始,有兩個訂閱許可證可用:

  • Lens Personal:此訂閱供個人、教育和初創公司使用(年收入或資金低於 1000 萬美元)。Lens Personal 訂閱是免費的。
  • Lens Pro:大型企業的專業用途需要這些訂閱。定價為每位使用者每月 19.90 美元或每位使用者每年 199 美元。可以在此處購買 Lens Pro 訂閱。

安裝 Lens

從 Lens 網站下載安裝程式。該網站將為您的系統(Mac、Windows 或 Linux)建議適當的下載,但您可以從下載按鈕下拉清單中選擇替代安裝程式。

運行安裝程式並打開 Lens。當您第一次打開應用程式時,它會提示您輸入 Len ID。

https://ithelp.ithome.com.tw/upload/images/20240930/201690174oiVQzUV1V.png

請選擇 Lens ID,創建一個 Lens ID

https://ithelp.ithome.com.tw/upload/images/20240930/20169017EcNW3RtHCU.png

https://ithelp.ithome.com.tw/upload/images/20240930/20169017eLos64dbLx.png

需要驗證您的電子郵件,然後選擇 Add Lens Subscription(添加 Lens 訂閱)

https://ithelp.ithome.com.tw/upload/images/20240930/20169017eMALRldgZb.png

選擇 Lens Personal 或 Lens Pro 訂閱(提供 Lens Pro 的 30 天免費試用。)

https://ithelp.ithome.com.tw/upload/images/20240930/20169017l5l4lkkmny.png

選擇 Open Lens Desktop 以打開 Lens。該應用程式將檢查更新,然後您就可以開始使用了。

https://ithelp.ithome.com.tw/upload/images/20240930/20169017je7Nf0CVKd.png

Lens 安裝好了以後,就可以開始示範 Teleport Kube Agent

上一篇文章已經在 demo2-cluster GKE 集群安裝了 Kube Agent,請讀者按照昨天的步驟再連接到另一個 GKE 集群,以下示範需要使用到。

綁定成功後會看到兩個以上不同的 Kubernets 叢集

https://ithelp.ithome.com.tw/upload/images/20240930/20169017dpOY4mrwEt.png

我們先使用 tsh 指令登入 ithome-202409-demo-2_demo2-cluster 這個叢集

https://ithelp.ithome.com.tw/upload/images/20240930/20169017Ka0vLuuxtc.png

再使用 tsh kube login cicd-cluster 指令登入另一個 cicd-cluster 叢集

https://ithelp.ithome.com.tw/upload/images/20240930/20169017tAoUJBLJHd.png

cat ${HOME?}/teleport-kubeconfig.yaml 可以看到兩個叢集的 kubeconfig 都出現了,查看其 yaml 檔案,會發現 clusters.cluster.server 會是 teleport 的網址:3026 如下

apiVersion: v1
clusters:
- cluster:
    server: https://teleport的網址:3026

打開 Lens

進入 Catalog 頁面,會發現剛剛使用 Teleport 連接的這兩個叢集都出現了,將其釘選至左側選單,點擊 Connect 連接進入 K8s 集群

https://ithelp.ithome.com.tw/upload/images/20240930/201690175PW1l1Tdvn.png

會發現 Worker Node 已經可以看到了,但是其 CPU 及 Memory 並沒有顯示出來,接下來幫兩個集群快速安裝 Lens Prometheus,點擊左上角此叢集旁邊的 符號,再點擊 Setting

https://ithelp.ithome.com.tw/upload/images/20240930/201690173k7McKBgdg.png

進入 Lens Metrics 將這三個都打開,如果讀者的叢集已經安裝了 Prometheus 可以跳過此步驟。
https://ithelp.ithome.com.tw/upload/images/20240930/20169017xtGdwa13lc.png

進入 Metrics 頁面,選擇 Auto Detect Promtheus ,如果抓不到 Prometheus,可以自行輸入 Prometheus 地址 (<namespace>/<service>:<port>),例如,Lens 安裝的 Prometheus 為 lens-metrics/prometheus:80

https://ithelp.ithome.com.tw/upload/images/20240930/201690173SP9MPJMik.png

進入 Node 頁面,可以看到當下的 CPU 及 Memory 都可以看得到了。

注意:如果使用的是 AWS EKS 可以抓到正確的 Disk 使用量,但是使用 GCP GKE 的話會抓不到。

https://ithelp.ithome.com.tw/upload/images/20240930/20169017WToIeIvssW.png

點選左側選單,可以快速切換集群,而無需透過 kubectl 指令切換 Current Context,可以很方便地同時管理多個集群。

https://ithelp.ithome.com.tw/upload/images/20240930/20169017cmp7Nbqlc6.png

來安裝 Lens 有趣的 Extensions 吧!

  1. 切換到 Lens 上的 Extensions view(在 macOS 上為 CMD+SHIFT+E)。
  2. 在 Install Extension 框中輸入 @nevalla/kube-resource-map
  3. 點擊 Install 按鈕。

安裝完後可以看到 K8s 中各個組件關聯性,我使用 apisix-ingress-controller 來示範

https://ithelp.ithome.com.tw/upload/images/20240930/20169017s2TmAeJkAo.png

可以看到和 Deployment: apisix-ingress-controller 相關的各種組件關係圖,如果服務有問題時,可以快速地進行排查。

Teleport Application Access

以下演示如何配置通過 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 的訪問權限。

https://ithelp.ithome.com.tw/upload/images/20240930/20169017DyPVpVxwkn.png

進到 Teleport Web 首頁,可以看到剛剛創建的 APP 出現了,點擊 Grafana 右側的 Launch 連接。

https://ithelp.ithome.com.tw/upload/images/20240930/20169017WshHeMxhxA.png

可以看到他是透過 Teleport 的網址加上前綴進行跳板轉導到 K8s 內部的服務,所以剛剛的 DNS 才需要設定成 *.teleport.demoit.shop 通配符,證書也不會有問題。

https://ithelp.ithome.com.tw/upload/images/20240930/20169017EdoGTOVybH.png

總結

Lens 和 Teleport 為開發者和管理員提供了簡化的應用程式訪問解決方案。Lens 作為 Kubernetes IDE,提供直觀的界面來管理和監控 Kubernetes 集群,並通過其內置的 kubectl 插件簡化了應用程式的訪問。Teleport 則專注於 Kubernetes 及 Application ****的安全訪問控制,提供基於身分驗證的訪問管理、審計日誌和會話錄製等功能,確保只有授權用戶才能訪問敏感應用程式。

筆者使用3天的時間來介紹 Teleport,但是這只是 Teleport 的冰山一角而已,它還有非常多強大的功能,例如,透過多重身份驗證登入、派發臨時金鑰、連接各類 DB、取代堡壘主機等,如果讀者想要更近一步認識 Teleport,可以到官方網頁查詢更多的設定方法,那裡的文件都寫得非常完整。

參考文件


上一篇
Day15 Kubernetes 安全遠程操控術(二):Teleport 讓你的集群隨叫隨到
下一篇
Day17 GKE 秘密封印:External Secret Manager & Reloader
系列文
異世界生存戰記:30天煉成GKE大師30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言