使用 aws ssm cli 連接跳板機(jī)
背景
在云原生開發(fā)越來(lái)越熱的今天,公司采用云服務(wù)提供商的托管 Kubernetes 集群部署應(yīng)用很常見。如果采用了 AWS 的 EKS,并且公司網(wǎng)絡(luò)和集群的網(wǎng)絡(luò)沒有打通的情況下,要查看集群資源,可以通過 AWS 的會(huì)話管理器,啟動(dòng) Web Console 來(lái)進(jìn)行。但是這樣手動(dòng)步驟過多,對(duì)開發(fā)不夠友好。
并且目前的 AWS web console,有一個(gè) BUG,即在 web console 里通過 kubectl edit cm/xxxconfigmap 對(duì) configmap 進(jìn)行編輯后,無(wú)法使用常用的 ESC 或者 Ctrl + [ 退出 vi 的插入模式,因?yàn)檫@兩個(gè)按鍵方式都會(huì)被瀏覽器截獲,導(dǎo)致失去編輯窗口的焦點(diǎn)。盡管我通過試驗(yàn) Ctrl + o 可以不失去焦點(diǎn)成功退出vi 的插入模式,但是如果能夠不用 web console 是最理想的。

aws ssm cli
可以通過 aws ssm cli 來(lái)避免使用 web console。但是直接使用會(huì)報(bào)連接失敗的錯(cuò)誤。
解決方案
通過腳本自動(dòng)登錄并獲取 AWS 臨時(shí)令牌,以獲得連接權(quán)限。
先決條件
Python3 已安裝:
? python3 --version
Python 3.8.2
克隆腳本
git clone [email protected]:Jeff-Tian/aws-adfs-auth.git
cd aws-adfs-auth
安裝依賴
sudo pip3 install --upgrade pip # upgrade to latest pip3
sudo pip3 install -r requirements.txt # install dependencies
獲取臨時(shí)令牌
CYBERARK_SERVER=pam.corp.your-company.com ADFS_DOMAIN=adfs.corp.your-company.com ADFS_DOMAIN_USERNAME=cnXXX ADFS_DOMAIN_PASSWORD=***** python3 main.py -r cn-north-1 --no-certificate-verify
安裝 ssm 插件
curl "https://s3.amazonaws.com/session-manager-downloads/plugin/latest/mac/session-manager-plugin.pkg" -o "session-manager-plugin.pkg"
sudo installer -pkg session-manager-plugin.pkg -target /
ln -s /usr/local/sessionmanagerplugin/bin/session-manager-plugin /usr/local/bin/session-manager-plugin
連接跳板機(jī)
aws ssm start-session --target i-1234-instance-id-of-ec2
使用 kubectl 命令查看集群資源
? aws ssm start-session --target i-1234-instance-id-of-ec2
Starting session with SessionId: jeff-sqs-test-0a8d0d4f75545e986
sh-4.2$ sudo su
[root@ip-172-20-20-231 bin]# kubectl get pod
NAME READY STATUS RESTARTS AGE
adminer-f5cc4fcc7-dx7d9 1/1 Running 0 12d
yapi-deployment-mongo-855fff7c6d-fshs4 1/1 Running 0 12d
[root@ip-172-20-20-231 bin]# exit
exit
sh-4.2$ exit
exit
Exiting session with sessionId: jeff-sqs-test-0a8d0d4f75545e986.
總結(jié)
第一次使用需要執(zhí)行一系列命令,因?yàn)樾枰惭b一些依賴。在隨后的工作中,只需要執(zhí)行如下兩個(gè)命令就行了:
CYBERARK_SERVER=pam.corp.your-company.com ADFS_DOMAIN=adfs.corp.your-company.com ADFS_DOMAIN_USERNAME=cnXXX ADFS_DOMAIN_PASSWORD=***** python3 main.py -r cn-north-1 --no-certificate-verify
aws ssm start-session --target i-1234-instance-id-of-ec2
臨時(shí)令牌只有一個(gè)小時(shí)的有效期,但是由于執(zhí)行命令比起操作網(wǎng)頁(yè)快得多,因此很方便自動(dòng)化。
