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