Kubernetes 配置

在 Kubernetes 配置頁面中,可以管理用於連線 Kubernetes 叢集的引數。上游繫結到 Kubernetes 服務,以及叢集閘道器繫結 k8s,都需要先在此頁面完成叢集配置。

配置列表展示了所有已新增的 Kubernetes 叢集,包括以下欄位:

  • ID / 名字:叢集的唯一標識與名稱
  • 主機名 / 埠:叢集的主機地址與埠
  • 認證型別:鑑權方式,靜態 TokenAWS EKS 動態 TokenAWS EKS 動態 Token26.6.1-1 版本中首次引入。
  • EKS 叢集名 / AWS 區域 / AWS IAM 角色 ARN:僅在使用 AWS EKS 動態 Token 時展示
  • 啟用 SSL 驗證:是否啟用 SSL 驗證,選擇 AWS EKS 動態 Token 方式時,此開關需要保持關閉。
  • 超時時間:連線、讀取和傳送超時時間
  • 狀態:當前連線狀態(如未連線、錯誤 等)

新增 Kubernetes 叢集

點選頁面右上角的 新增 Kubernetes 叢集 按鈕,進入叢集新增表單。

系統支援兩種鑑權方式,根據實際情況選擇。

方式一:靜態 Token

填寫以下欄位:

欄位說明
名字叢集名稱(必填)
主機名Kubernetes API Server 的主機地址(必填)
埠號(必填)
啟用 SSL 驗證是否啟用 SSL 證書驗證,預設開啟
認證型別選擇 靜態 Token
Token用於連線 Kubernetes 服務的 Bearer Token(必填)
驗證 Token是否在儲存前驗證 Token 有效性,預設開啟
連線超時連線超時,預設 15 秒
讀取超時讀取超時,預設 15 秒
傳送超時傳送超時,預設 15 秒

填寫完成後點選 建立 完成建立。

方式二:AWS EKS 動態 Token

適用於 Amazon EKS 叢集,透過 AWS IAM 憑證動態獲取訪問 Token。

填寫以下欄位:

欄位說明
名字叢集名稱(必填)
主機名EKS API Server 地址(必填)
埠號(必填)
啟用 SSL 驗證是否啟用 SSL 證書驗證,預設開啟
認證型別選擇 AWS EKS 動態 Token
EKS 叢集名EKS 叢集名稱(必填)
AWS 區域叢集所在的 AWS 區域,如 us-east-1(必填)
AWS 訪問金鑰 IDAWS IAM 使用者的訪問金鑰 ID(必填)
AWS 秘密訪問金鑰AWS IAM 使用者的秘密訪問金鑰(必填)
IAM 角色 ARN用於跨賬號管理 EKS 的 IAM 角色 ARN(可選),格式為 arn:aws:iam::<account-id>:role/<role-name>,透過 STS AssumeRole 實現跨賬號訪問
驗證認證資訊是否在儲存前驗證鑑權資訊有效性,預設開啟
連線超時連線超時,預設 15 秒
讀取超時讀取超時,預設 15 秒
傳送超時傳送超時,預設 15 秒

填寫完成後點選 建立 完成建立。

生成靜態 Token

Kubernetes 使用 Token 進行鑑權。以下步驟介紹如何建立一個具備上述許可權的 ServiceAccount 並獲取其 Token。

第一步:建立 token.yaml 檔案

apiVersion: v1
kind: ServiceAccount
metadata:
  name: openresty-edge-serviceaccount
  namespace: default

---
apiVersion: rbac.authorization.Kubernetes.io/v1
kind: ClusterRole
metadata:
  name: openresty-edge-clusterrole
rules:
  - apiGroups:
      - ""
    resources:
      - namespaces
      - services
      - endpoints
      - pods
    verbs:
      - get
      - list
      - watch

---
apiVersion: rbac.authorization.Kubernetes.io/v1
kind: ClusterRoleBinding
metadata:
  name: openresty-edge-clusterrole-binding
roleRef:
  apiGroup: rbac.authorization.Kubernetes.io
  kind: ClusterRole
  name: openresty-edge-clusterrole
subjects:
  - kind: ServiceAccount
    name: openresty-edge-serviceaccount
    namespace: default

第二步:應用配置並獲取 Token

$ kubectl apply -f token.yml
$ kubectl describe secret $(kubectl get secret | grep openresty-edge-serviceaccount | awk '{print $1}') | grep "token: " | awk '{print $2}'
eyJhbGciOiJSUzI1NiIsImtpZCI6InJOZkJvNWItMDhYOXBfUGw2czBleWxNWXZBWi1KOXFqQ05GdjVCWUdpc3cifQ...

將輸出的 Token 填入新增叢集表單的 Token 欄位即可。

生成 AWS EKS 動態 Token

對於 Amazon EKS 叢集,OpenResty Edge 透過 AWS IAM 憑證動態獲取訪問 Token。以下步驟介紹如何準備所需的 IAM 使用者、IAM 角色以及叢集訪問許可權。

以下命令中的 012345678901(AWS 賬號 ID)、thoughtful-folk-mongoose(EKS 叢集名稱)、us-east-1(區域)、openresty-edge-user(使用者名稱)等均為示例值,請替換為你的實際值。

第一步:建立 IAM 使用者並生成訪問金鑰

建立一個專用的 IAM 使用者,用於在 Edge 中作為基礎憑證:

aws iam create-user --user-name openresty-edge-user
aws iam create-access-key --user-name openresty-edge-user

create-access-key 命令的輸出中會包含 AccessKeyIdSecretAccessKey,請妥善儲存,後續填入表單的 AWS 訪問金鑰 IDAWS 秘密訪問金鑰 欄位。

第二步:建立允許該使用者 AssumeRole 的 IAM 角色

aws iam create-role \
  --role-name EKSAccessRole \
  --assume-role-policy-document '{
    "Version": "2012-10-17",
    "Statement": [{
      "Effect": "Allow",
      "Principal": {
        "AWS": "arn:aws:iam::012345678901:user/openresty-edge-user"
      },
      "Action": "sts:AssumeRole"
    }]
  }'

建立成功後的角色 ARN(形如 arn:aws:iam::012345678901:role/EKSAccessRole)即為表單中的 IAM 角色 ARN

第三步:為 EKS 叢集配置訪問條目(推薦,EKS 1.23+)

透過 EKS 訪問條目(Access Entries)將上一步建立的 IAM 角色繫結到目標叢集,並授予 Kubernetes 層的訪問許可權:

# 為叢集新增訪問條目
aws eks create-access-entry \
  --cluster-name thoughtful-folk-mongoose \
  --principal-arn arn:aws:iam::012345678901:role/EKSAccessRole \
  --region us-east-1

# 關聯訪問策略(此處示例為叢集管理員許可權,可按需選擇更小粒度的策略)
aws eks associate-access-policy \
  --cluster-name thoughtful-folk-mongoose \
  --principal-arn arn:aws:iam::012345678901:role/EKSAccessRole \
  --policy-arn arn:aws:eks::aws:cluster-access-policy/AmazonEKSClusterAdminPolicy \
  --access-scope type=cluster \
  --region us-east-1

第四步:驗證配置(可選)

TOKEN=$(aws eks get-token --cluster-name thoughtful-folk-mongoose --region us-east-1 | jq -r '.status.token'
ENDPOINT=https://281CEF339BFD565BF8605A8A67EA6084.gr7.us-east-1.eks.amazonaws.com
curl -k -H "Authorization: Bearer $TOKEN" $ENDPOINT/api