如何通过Python API检查GKE集群是否使用预创建的VPC辅助IP范围
检查GKE辅助IP范围占用状态的Python实现方案
核心逻辑
要判断目标辅助IP范围是否被GKE集群占用,需要两步:一是抓取所有GKE集群正在使用的IP范围,二是核对VPC中该范围的状态——因为即使VPC里有这个辅助范围,也可能未被任何GKE集群或其他资源使用。
1. 必备权限
确保你的服务账号拥有以下权限:
container.clusters.get:获取GKE集群配置详情compute.addresses.list:查询VPC中的辅助IP范围信息
2. 获取GKE集群已使用的IP范围
通过GKE Python客户端库,遍历集群及节点池的配置,提取所有正在使用的IP段:
from google.cloud import container_v1 def get_gke_used_ip_ranges(project_id, region): client = container_v1.ClusterManagerClient() parent = f"projects/{project_id}/locations/{region}" clusters = client.list_clusters(parent=parent) used_ranges = set() for cluster in clusters: # 提取Pod网段(集群级辅助IP范围) if cluster.cluster_ipv4_cidr: used_ranges.add(cluster.cluster_ipv4_cidr) # 提取服务网段(集群级辅助IP范围) if cluster.services_ipv4_cidr: used_ranges.add(cluster.services_ipv4_cidr) # 提取节点池使用的IP范围(如果配置了辅助IP用于节点) for node_pool in cluster.node_pools: if node_pool.config.ipv4_cidr_block: used_ranges.add(node_pool.config.ipv4_cidr_block) return used_ranges
3. 查询VPC中的辅助IP范围及状态
通过Compute Engine API,筛选出指定VPC下的所有辅助IP范围,获取其CIDR和状态:
from google.cloud import compute_v1 def get_vpc_secondary_ip_ranges(project_id, region, vpc_name): client = compute_v1.AddressesClient() filter_str = f"network=https://www.googleapis.com/compute/v1/projects/{project_id}/global/networks/{vpc_name} AND addressType=SECONDARY" request = compute_v1.ListAddressesRequest( project=project_id, region=region, filter=filter_str ) addresses = client.list(request=request) secondary_ranges = [] for addr in addresses: secondary_ranges.append({ "cidr": addr.address, "status": addr.status }) return secondary_ranges
4. 校验目标IP范围状态
结合上述两个接口的结果,判断目标CIDR的使用状态:
def check_target_range_status(target_cidr, project_id, region, vpc_name): used_ranges = get_gke_used_ip_ranges(project_id, region) vpc_ranges = get_vpc_secondary_ip_ranges(project_id, region, vpc_name) # 先检查是否被GKE集群占用 if target_cidr in used_ranges: return "已被GKE集群占用" # 再检查VPC中的状态 for range_info in vpc_ranges: if range_info["cidr"] == target_cidr: if range_info["status"] == "RESERVED": return "空闲(已在VPC保留,未被使用)" elif range_info["status"] == "IN_USE": return "被非GKE资源占用" return "该CIDR不在指定VPC的辅助IP范围列表中"
额外说明
- 依赖安装:执行
pip install google-cloud-container google-cloud-compute安装客户端库 - 认证配置:通过设置
GOOGLE_APPLICATION_CREDENTIALS环境变量,指向服务账号密钥文件完成身份认证 - 跨区域场景:如果你的GKE集群分布在多个区域,需要遍历所有目标区域执行上述检查
内容的提问来源于stack exchange,提问作者red888
相关产品推荐
相关产品推荐

