Edited at

GCPインスタンスに複数外部IPを設定

More than 1 year has passed since last update.

インスタンスに直接IPアドレスを設定するのかと思っていましたが、何やら転送ルールなるものを設定して

任意の条件のリクエストをフォワーディングさせることで設定できるようです。


参考URL

https://cloud.google.com/compute/docs/protocol-forwarding/


まず静的IPアドレスを必要な数だけ予約


ターゲットインスタンスを作成

gcloud compute target-instances create [target-instance-name] --instance [ex-instance-name]


補足

# 一覧表示

gcloud compute target-instances list
# 取得
gcloud compute target-instances describe [TARGET_INSTANCE]
# 削除
gcloud compute target-instance delete [TARGET_INSTANCE]


転送ルールを作成

# ポート80に来た `111.111.111.111` へのTCPリクエストを `[instance-name]` へ転送する

gcloud compute forwarding-rules create [forwarding-rule-name]] \
--ip-protocol TCP \
--ports 80 \
--target-instance [instance-name] \
--address 111.111.111.111

# ポート80に来た `222.222.222.222` へのTCPリクエストを `[instance-name]` へ転送する
gcloud compute forwarding-rules create [forwarding-rule-name]] \
--ip-protocol TCP \
--ports 80 \
--target-instance [instance-name] \
--address 222.222.222.222


補足

一覧表示

gcloud compute forwarding-rules list


Nginxで対象のIPアドレスを使う場合

下記のエラーがでてしまう

[root@hoge-instance nginx]# nginx -t

nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: [emerg] bind() to 12.34.56.78:80 failed (99: Cannot assign requested address)
nginx: configuration file /etc/nginx/nginx.conf test failed

下記の設定で回避

echo "net.ipv4.ip_nonlocal_bind = 1" >> /etc/sysctl.conf

sysctl -p /etc/sysctl.conf