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

如何通过AWS Lambda Python SDK列出指定命名空间的EKS Pods

解决方案:在AWS Lambda中用Python列出EKS特定命名空间的Pod

核心逻辑

Boto3的EKS服务客户端仅负责集群层面的管理操作(比如创建/删除集群、更新配置),不直接支持Kubernetes资源(如Pod)的查询。要实现等效于kubectl get pods -n <namespace>的功能,需要结合Kubernetes官方Python客户端,再通过Boto3获取EKS集群的认证凭证完成授权。


步骤1:准备Lambda依赖

Lambda默认不带kubernetes库,需通过以下方式添加:

  • 本地安装依赖:pip install kubernetes -t ./layer/python
  • 将打包后的文件创建为Lambda层,关联到目标Lambda函数

步骤2:完整代码实现

以下代码包含EKS认证、K8s客户端初始化和Pod查询逻辑:

import boto3
from kubernetes import client, config
from kubernetes.config.kube_config import KubeConfigLoader, Configuration

def lambda_handler(event, context):
    # 替换为你的集群名称和目标命名空间
    cluster_name = "your-eks-cluster-name"
    target_namespace = "your-target-namespace"
    
    # 1. 获取EKS集群基础信息
    eks_client = boto3.client('eks')
    cluster_info = eks_client.describe_cluster(name=cluster_name)
    endpoint = cluster_info['cluster']['endpoint']
    ca_data = cluster_info['cluster']['certificateAuthority']['data']
    
    # 2. 构建临时KubeConfig
    kube_config = {
        "apiVersion": "v1",
        "clusters": [{
            "cluster": {
                "server": endpoint,
                "certificate-authority-data": ca_data
            },
            "name": cluster_name
        }],
        "contexts": [{
            "context": {
                "cluster": cluster_name,
                "user": f"aws-eks-{cluster_name}"
            },
            "name": cluster_name
        }],
        "current-context": cluster_name,
        "kind": "Config",
        "preferences": {},
        "users": [{
            "name": f"aws-eks-{cluster_name}",
            "user": {
                "exec": {
                    "apiVersion": "client.authentication.k8s.io/v1beta1",
                    "command": "aws",
                    "args": ["eks", "get-token", "--cluster-name", cluster_name]
                }
            }
        }]
    }
    
    # 3. 加载配置并初始化K8s客户端
    loader = KubeConfigLoader(kube_config)
    k8s_config = type.__call__(Configuration)
    loader.load_and_set(k8s_config)
    k8s_api = client.CoreV1Api(client.ApiClient(k8s_config))
    
    # 4. 查询目标命名空间的Pod
    pods = k8s_api.list_namespaced_pod(namespace=target_namespace)
    
    # 提取关键信息返回
    pod_list = []
    for pod in pods.items:
        pod_list.append({
            "name": pod.metadata.name,
            "status": pod.status.phase,
            "node": pod.spec.node_name,
            "created_at": pod.metadata.creation_timestamp.strftime("%Y-%m-%d %H:%M:%S")
        })
    
    return {"statusCode": 200, "body": pod_list}

步骤3:配置Lambda权限

Lambda执行角色需要添加以下IAM权限:

  • eks:DescribeCluster:用于获取集群端点和CA证书
  • eks:GetToken:用于生成K8s API的认证令牌
  • 同时需要在EKS集群的aws-auth ConfigMap中配置RBAC,允许该角色访问目标命名空间的Pod资源

关键说明

  • Boto3无法直接操作K8s资源的原因:EKS服务是AWS层面的集群管理API,和Kubernetes原生资源API属于两个独立体系
  • 认证原理:通过aws eks get-token命令生成临时令牌,Lambda执行角色的身份会自动被AWS和EKS集群识别,无需手动配置密钥

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.18 21:00:16