【问题标题】:GCP - how to change the IP on a VM with 2 NICs?GCP - 如何更改具有 2 个 NIC 的 VM 上的 IP?
【发布时间】:2020-02-26 14:56:19
【问题描述】:

我有一个带有 2 个 NIC 的虚拟机。出于所有意图和目的,它是一个 VPN 服务器,它在一个接口上接受连接请求,然后将流量转发到另一个接口。

我需要定期更改第二个界面上的 IP,这很容易通过 Web 界面完成。我想使用 GCP 脚本工具进行此更改,以减少该过程的手动操作。

除了更新 access-config 之外,我已经成功地自动化了所有步骤。这是因为两个接口具有相同的访问配置名称(“外部 NAT”)。我一直无法找到重命名或重新创建此访问配置名称的方法,也没有找到任何解决方法。

任何意见将不胜感激。

- accessConfigs:
  - kind: compute#accessConfig
    name: External NAT
    natIP: ##.##.##.##
    networkTier: STANDARD
    type: ONE_TO_ONE_NAT
  fingerprint: ==========
  kind: compute#networkInterface
  name: nic0
  network: https://www.googleapis.com/compute/v1/projects/#######/global/networks/inbound
  networkIP: 10.#.#.#
  subnetwork: https://www.googleapis.com/compute/v1/projects/#######/regions/northamerica-northeast1/subnetworks/inbound
- accessConfigs:
  - kind: compute#accessConfig
    name: External NAT
    natIP: ##.##.##.##
    networkTier: STANDARD
    type: ONE_TO_ONE_NAT
  fingerprint: =========
  kind: compute#networkInterface
  name: nic1
  network: https://www.googleapis.com/compute/v1/projects/#######/global/networks/outbound
  networkIP: 10.0.2.3
  subnetwork: https://www.googleapis.com/compute/v1/projects/#######/regions/northamerica-northeast1/subnetworks/outbound

【问题讨论】:

标签: google-cloud-platform gcloud


【解决方案1】:

我相信 (!?) [真的不是确定]您必须先删除然后再创建;您无法使用gcloud 更新现有的访问配置来更改 IP。

请其他人确认!

在牺牲实例上试一试在生产实例上使用它之前

因此:

PROJECT=[[YOUR-PROJECT]]
ZONE=[[YOUR-ZONE]]
INSTANCE=[[YOUR-INSTANCE]]
INTERFACE=[[YOUR-INTERFACE]] # Perhaps "nic1"

# Show what we have currently
gcloud compute instances describe ${INSTANCE} \
--zone=${ZONE} --project=${PROJECT} \
--format="yaml(networkInterfaces)"

# Delete the "External NAT" for ${INTERFACE}
gcloud compute instances delete-access-config instance-1 \
--zone=${ZONE} --project=${PROJECT} \
--network-interface=${INTERFACE} \
--access-config-name="External NAT"

# Show what we have currently **without** "External NAT" for ${INTERFACE}
gcloud compute instances describe ${INSTANCE} \
--zone=${ZONE} --project=${PROJECT} \
--format="yaml(networkInterfaces)"

# Create a new "External NAT" for ${INTERFACE}
# Include --address=ADDRESS if you have one
gcloud compute instances add-access-config ${INSTANCE} \
--zone=${ZONE} --project=${PROJECT} \
--network-interface=${INTERFACE} \
--access-config-name="External NAT"

# Show what we have currently with a **new** "External NAT" for ${INTERFACE}
gcloud compute instances describe ${INSTANCE} \
--zone=${ZONE} --project=${PROJECT} \
--format="yaml(networkInterfaces)"

更新

这让我很烦。

您可以通过${INTERACE}值在describe命令中过滤:

gcloud compute instances describe ${INSTANCE} \
--zone=${ZONE} --project=${PROJECT} \
--format="yaml(networkInterfaces[].filter(name:${INTERFACE})"

因为gcloud 具有专有过滤|格式化,通常最好格式化为JSON,然后使用jq。使用jq,我们可以通过${INTERFACE} 过滤并仅返回“外部NAT”访问配置:

gcloud compute instances describe ${INSTANCE} \
--zone=${ZONE} --project=${PROJECT} \
--format="json" \
jq -r ".networkInterfaces[]|select(.name==\"${INTERFACE}\")|.accessConfigs[]|select(.name==\"External NAT\")"

【讨论】:

  • 我很确定您是正确的 - 编辑 access-config 似乎是不可能的。
  • 而且,我强烈推荐您使用 gcloud 进行自动化的策略。它是一款出色的、文档齐全的完整工具。
  • 快速跟进:虽然您的解决方案没有达到我的预期,但我能够根据您回复中的语法解决我的问题。我不知道 delete-access-config 上的--network-interface 设置,一旦我知道它就足够简单了,可以处理其余的事情。谢谢!
  • 很失望地得知我误解了你的问题。请考虑回答您自己的问题并包括您所做的事情。这将可供后代使用。
  • 请不要失望 - 您的回复让我走上了解决问题的道路。完全测试后,我绝对会发布解决方案。没有什么比在互联网上找到不正确或具有误导性的解决方案更糟糕的了。
猜你喜欢
  • 2021-11-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-01-24
  • 2021-06-01
  • 2019-08-12
  • 1970-01-01
  • 2013-08-24
相关资源
最近更新 更多