You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过Boto3获取AWS EKS集群的命名空间?

解决AWS EKS集群命名空间查询问题(仅用Boto3辅助实现)

Boto3的EKS客户端describe_cluster()接口只能返回集群的基础设施元数据(比如集群端点、CA证书数据、ARN等),无法直接获取Kubernetes内部的命名空间资源——因为命名空间属于K8s API管理范畴,不在AWS EKS的API覆盖范围内。

要实现Python自动查询EKS命名空间,可通过以下步骤(核心依赖Boto3处理AWS认证,结合系统kubectl命令执行):

步骤1:用Boto3获取EKS集群的认证关键信息

先通过Boto3获取集群的端点和CA证书,同时获取访问集群的临时token:

import boto3
import subprocess
import json

# 切换AWS账号:两种方式任选
# 方式1:使用本地AWS配置文件中的指定profile
session = boto3.Session(profile_name="your-target-aws-profile")
# 方式2:跨账号STS Assume Role
# sts_client = boto3.client('sts')
# assume_response = sts_client.assume_role(
#     RoleArn="arn:aws:iam::TARGET_ACCOUNT_ID:role/your-cross-account-role",
#     RoleSessionName="eks-namespace-query-session"
# )
# session = boto3.Session(
#     aws_access_key_id=assume_response['Credentials']['AccessKeyId'],
#     aws_secret_access_key=assume_response['Credentials']['SecretAccessKey'],
#     aws_session_token=assume_response['Credentials']['SessionToken']
# )

eks_client = session.client('eks')
cluster_name = "your-eks-cluster-name"

# 获取集群基础认证信息
cluster_detail = eks_client.describe_cluster(name=cluster_name)
cluster_endpoint = cluster_detail['cluster']['endpoint']
cluster_ca_data = cluster_detail['cluster']['certificateAuthority']['data']

# 获取EKS访问临时token(等价于aws eks get-token命令)
token_cmd = [
    "aws", "eks", "get-token",
    "--cluster-name", cluster_name,
    "--profile", session.profile_name  # 用STS方式时可省略,自动继承会话凭证
]
token_result = subprocess.run(token_cmd, capture_output=True, text=True)
kube_token = json.loads(token_result.stdout)['status']['token']

步骤2:构造kubectl命令并执行命名空间查询

利用上面获取的认证信息,直接构造kubectl命令完成查询:

# 组装kubectl查询命令
kubectl_query_cmd = [
    "kubectl", "get", "namespaces",
    "--server", cluster_endpoint,
    "--certificate-authority-data", cluster_ca_data,
    "--token", kube_token
]

# 执行命令并输出结果
query_result = subprocess.run(kubectl_query_cmd, capture_output=True, text=True)
if query_result.returncode == 0:
    print("EKS集群命名空间列表:")
    print(query_result.stdout)
else:
    print("查询失败:")
    print(query_result.stderr)

关键注意事项

  • 确保系统已安装kubectl,且版本与目标EKS集群版本兼容(可通过Boto3的describe_cluster获取集群版本后匹配)
  • 多账号管理时,通过Boto3的Session切换profile或STS Assume Role即可实现跨账号集群访问
  • 若嫌手动构造参数麻烦,也可以用Boto3生成临时kubeconfig文件,再通过--kubeconfig参数指定给kubectl

内容的提问来源于stack exchange,提问作者Gilad Tayeb

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.06 23:00:54