【发布时间】:2022-04-21 09:43:10
【问题描述】:
我想获取我的 GCP 组织中的所有外部 IP 地址。此信息似乎在 GCP Console 中的 VPC 网络 > 外部 IP 地址下可用,但我似乎找不到 API 或导出此信息的方法。
我试过 GCLOUD 命令行工具,但它只列出静态 IP 地址。我还想要临时地址:gcloud compute addresses list
Go GCP Compute API 也是如此。
【问题讨论】:
我想获取我的 GCP 组织中的所有外部 IP 地址。此信息似乎在 GCP Console 中的 VPC 网络 > 外部 IP 地址下可用,但我似乎找不到 API 或导出此信息的方法。
我试过 GCLOUD 命令行工具,但它只列出静态 IP 地址。我还想要临时地址:gcloud compute addresses list
Go GCP Compute API 也是如此。
【问题讨论】:
Google Cloud 中有两种类型的公共(外部)IP 地址:区域性和全球性。
以下命令使用 Windows 语法。修改项目ID和区域列表的每个命令。
此命令将列出指定区域的区域地址:
gcloud compute addresses list --project development --filter="region:( us-west1, us-west2 )"
此命令将列出全局地址:
gcloud compute addresses list --global --project development
请注意,必须为每个项目重复此操作。组织没有选择。
列出您的凭据有权访问的项目:
gcloud projects list
这并不意味着此列表中的所有项目都是您组织的一部分。可以将凭据添加为组织外部项目中的成员帐户。
这并不意味着您组织中的所有项目都已列出。只有那些有权列出/访问项目的人。您的组织可能正在使用文件夹。
以下链接适用于 API:
【讨论】:
正如之前的回复中提到的,没有简单的方法可以获取这些信息。
我在自己的项目中尝试了一些命令,我可以列出我的实例上的所有外部临时 IP:
gcloud compute instances describe INTANCE_NAME --format='get(networkInterfaces[0].accessConfigs[0].natIP)' --zone ZONE
gcloud compute instances list --format='table(EXTERNAL_IP)'
我还找到了另一个public tracker,他们的要求与你提到的几乎相同,你可以看看那里并发表评论。
【讨论】:
要实现这个目标,你可以使用类似这样的东西
PROJECTS=$(gcloud projects list --format="value(name)")
for project in $PROJECTS
do
if [[ $(gcloud services list --project $project --format="table(NAME)" | sed '1d') =~ "compute.googleapis.com" ]];then
echo $project
gcloud compute addresses list --project $project --global
fi
done
【讨论】:
Google Cloud 使用随时间变化的各种 IP 地址。根据link,最近的方法是使用 DNS 查找命令(nslookup、dig 或 host)手动清理多个地址并与静态地址进行比较并挑选出临时地址。
话虽如此,如果可以将标志添加到命令gcloud compute addresses list 以列出临时 IP,则正在评估此功能的公共跟踪器:
https://issuetracker.google.com/119178618
这里是另一个相关的话题:https://stackoverflow.com/a/53650099
【讨论】:
通过在 Linux 上运行以下命令,我设法获得了Ephemeral IP 地址。
GCP console shows (VPC network -> External IP addresses):
- XX.XX.XX.XX us-west2 Ephemeral
vmnumber1 XX.XX.XX.XX us-west2 Static
vmnumber2 XX.XX.XX.XX us-west2 Static
These are the Static Public IPs (gcloud does not show Ephemeral IP addresses)
gcloud --project your_project_name compute addresses list --format="value(ADDRESS)" | sort | tee -a static_public_ips
XX.XX.XX.XX
XX.XX.XX.XX
These are the Public IPs assigned to instances, it may include (Static and Ephemeral IP addresses)
gcloud --project your_project_name compute instances list --filter="EXTERNAL_IP!=NULL" --format="value(EXTERNAL_IP)" | sort | tee -a static_public_ips_assigned
XX.XX.XX.XX
XX.XX.XX.XX
Then we can compare the two files, but we want the IPs that are not in `static_public_ips` which are the `Ephemeral` ones.
diff -u static_public_ips static_public_ips_assigned | sed -n '/^+[^+]/ s/^+//p'
XX.XX.XX.XX
【讨论】:
#!/bin/bash -e
PROJECTS=$(gcloud projects list --format="value(project_id)" | sort | uniq)
for project in $PROJECTS
do
if [[ $(gcloud services list --project $project --format="table(NAME)" | sed '1d') =~ "compute.googleapis.com" ]];then
echo $project
gcloud compute addresses list --project $project
gcloud compute addresses list --project $project --global
fi
done
【讨论】: