こんにちは、CRE部 技術支援チームです。
前回ではAnthos on bare metalクラスタインストール・作成を実施しました。
今回はGoogleCloudにKubernetesクラスタを作成して、ニフクラとGoogleCloudのKubernetesクラスタ同士をVPNで接続するマルチクラウド環境の構築方法を紹介します。
第1回. Anthos on bare metalクラスタインストール・作成編
第2回. マルチクラウド環境構築_VPN接続編
第3回. マルチクラスタメッシュ構成_East-WestGateway作成編
第4回. マルチクラスタメッシュ構成_疎通確認編

- はじめに
- 前提条件
- 作成するリソース
- ニフクラ環境構築
- GoogleCloud環境構築
- ニフクラとGoogleCloudを拠点間VPNゲートウェイで接続
- GKEクラスタのAnthos登録
- ニフクラ環境上でGKEクラスタでのコマンド操作について
- ニフクラ環境からGoogleCloud環境へ拠点間VPNゲートウェイ接続疎通確認
- GoogleCloud環境からニフクラ環境へ拠点間VPNゲートウェイ接続疎通確認
- まとめ
- 注意事項
はじめに
今回はGoogle Kubernetes Engine(GKE)クラスタ(他社サイトリンク)を作成して、ニフクラ環境とGoogleCloud環境を拠点間VPNゲートウェイで接続してクラスタ同士の通信を確認します。
全体構成イメージ

前提条件
- ニフクラの基本的なコントロールパネルの操作、サービスを利用する知識
- GoogleCloudの基本的なコントロールパネルの操作、サービスを利用する知識
- Kubernetesの基本的な知識、利用経験
- Google Kubernetes Engine(GKE)クラスタの基本的な知識、利用経験
- Istio(他社サイトリンク)等のサービスメッシュの基本的な知識、利用経験
- GoogleCloudのアカウントを取得済み
- GoogleCloudにプロジェクトが作成済み
作成するリソース
ニフクラリソース
前回作成のニフクラ環境リソースに拠点間VPNゲートウェイを追加します。
| リソース | 数量 |
|---|---|
| 拠点間VPNゲートウェイ | 1 |
| 拠点間VPNゲートウェイ:VPNコネクション | 1 |
| 拠点間VPNゲートウェイ:カスタマーゲートウェイ | 1 |
以下前回作成リソースを利用します。
- ファイアウォール
| ファイアウォール名 | INルール | 用途 |
|---|---|---|
| FWNIFC | TCP22:xxx.xxx.xxx.xxx | 外部のサーバー構築アクセス元から検証サーバーへのSSH接続用グローバルIP |
- プライベートLAN
| プライベートLAN名 | CIDR | 用途 |
|---|---|---|
| NifcAnthosClsLan | 172.16.232.0/24 | 作成したAnthos on bare metalクラスタが展開されるネットワーク |
- 検証サーバー
| 項目 | 値 |
|---|---|
| サーバー名 | NifcAnthosSrv |
| OS | Ubuntu Server 20.04 LTS |
| サーバータイプ | e-large16 |
| グローバルIPアドレス | 自動割り当て |
| プライベートIPアドレス | 172.16.232.1 |
- 増設ディスク
| 項目 | 値 |
|---|---|
| ディスク名 | NifcDisk |
| ディスクタイプ | 標準ディスク |
| 容量 | 300G |
GoogleCloudリソース
以下のリソースをGoogleCloud環境に作成します。
| リソース | 数量 |
|---|---|
| VPC(他社サイトリンク) | 1 |
| ファイアウォール(他社サイトリンク) | 1 |
| GKEクラスタ(他社サイトリンク) | 1 |
| CLOUD VPN(他社サイトリンク) | 1 |
ニフクラ環境構築
ニフクラ環境に拠点間VPNゲートウェイを作成します。

ニフクラ 拠点間VPNゲートウェイ作成
| 項目 | 値 |
|---|---|
| VPN名 | NifcAnthosVpn |
| グローバルIPアドレス | 自動割り当て |
| プライベートIPアドレス | 172.16.232.2 |
GoogleCloud環境構築
以下の内容でマルチクラウド環境の連携先であるGoogleCloud環境を構築します。

GoogleCloudリソース作成
| ネットワーク名 |
|---|
| anthos-hybrid |
| ファイアウォール名 | 送信元IP | プロトコルとポート | 用途 |
|---|---|---|---|
| nifc-rules | 172.16.232.0/24(NifcAnthosClsLan) | 全て許可 | ニフクラAnthos on bare metalクラスタが稼働しているプライベートLAN環境からの通信を許可 |
| ニフクラ拠点間VPNゲートウェイのグローバルIP | 全て許可 | ニフクラ拠点間VPNゲートウェイからの通信を許可 |
GKEクラスタ作成
以下の内容でGKEクラスタ(他社リンクサイト)を作成します
| 項目 | 値 |
|---|---|
| 名前 | nifc-anthosgke-cls |
| ゾーン | us-central1-c |
| コントロールプレーンのバージョン | 静的バージョン |
| GKEバージョン | 1.27.3-gke.100 (デフォルト) |
| マシンの構成 | e2-standard-2以上 |
| ネットワーク | anthos-hybrid |
| ノードのサブネット | anthos-hybrid |
| IPv4ネットワークス | 一般公開クラスタ |
| Workload Identity | 有効 |
GKEクラスタが登録されます。

以上でGKEクラスタ作成は完了です。
GoogleCloud CloudVPN作成
GoogleCloudのCloudVPNを作成します。
※CloudVPNはニフクラの拠点間VPNゲートウェイの接続確認済み機器ではないので利用者責任のもと検証を実施、利用をご検討ください。
| 項目 | 値 |
|---|---|
| 名前 | nifc-anthos-vpn |
| ネットワーク | anthos-hybrid |
| リージョン | us-central1(アイオワ) |
| グローバルIPアドレス | 自動割り当て |
| トンネル名 | nif-anthos-tn |
| リモートピアIPアドレス | ニフクラ拠点間VPNゲートウェイのグローバルIP |
| IKEバージョン | IKEv1 |
| IKE 事前共有キー | ニフクラの事前共有鍵仕様に沿った内容で作成 ※「生成してコピー」ボタンで生成する場合、ニフクラの事前共有鍵仕様と合致しない場合があるので注意する。 |
| ルーティングオプション | ルートベース選択 |
| リモートネットワークIPの範囲 | 172.16.232.0/24(NifcAnthosClsLan) |
ニフクラとGoogleCloudを拠点間VPNゲートウェイで接続
クラスタ間連携のためにニフクラとGoogleCloudを拠点間VPNゲートウェイで接続します。

ニフクラ ファイアウォール編集
ニフクラのファイアウォールにGKEクラスタとCloudVPNの設定を追加します。
| ファイアウォール名 | INルール | 用途 |
|---|---|---|
| FWNIFC | TCP22:xxx.xxx.xxx.xxx | 外部のサーバー構築アクセス元から検証サーバーへのSSH接続用グローバルIP |
| ANY:anthos-hybridのus-central1リージョンの内部IP範囲 | GoogleCloud GKEクラスタ | |
| ANY:CloudVPNのグローバルIP | GoogleCloud CloudVPN |
anthos-hybridの内部IP範囲はGoogleCloudコントロールパネルの以下で確認

CloudVPNのグローバルIPはGoogleCloudコントロールパネルの以下で確認

ニフクラ拠点間VPNゲートウェイ接続設定
以下のリソースを作成します。
| 項目 | 値 |
|---|---|
| 名前 | VPNCGW |
| 対向機器IPアドレス | CloudVPNのグローバルIP |
| 接続方式 | IPSec VTI |
| 対向機器LAN側IPアドレス帯 | anthos-hybridのus-central1リージョンの内部IP範囲 |
| 対向機器LAN側IPアドレス | 空欄 |
| 項目 | 値 |
|---|---|
| カスタマーゲートウェイ | VPNCGW |
| 接続方式 | IPSec VTI |
| IKEバージョン | IKEv1 |
| 暗号化アルゴリズム | AES128 |
| 認証アルゴリズム | SHA1 |
| 事前共有キー | Cloud VPNで作成した事前共有キー |
| IKE lifetime | 空欄 |
| ESP lifetime | 空欄 |
| DH Group | デフォルト |
ステータスが「接続済み」で表示されていることを確認します。

ニフクラからGoogleCloudルーティング
ニフクラ検証サーバー(NifcAnthosSrv)でroute コマンドを実行してGoogleCloudへのルーティングを設定します。
$ route add -net yyy.yyy.yyy.yyy/20(anthos-hybridのus-central1リージョンの内部IP範囲) gw 172.16.232.50
GoogleCloud環境拠点間VPNゲートウェイ接続確認
ステータスが「確立済み」で表示されていることを確認します。

以上で拠点間VPNゲートウェイ接続は完了です。
GKEクラスタのAnthos登録
ニフクラとGoogleCloudの拠点間VPNゲートウェイ接続疎通確認の前にGKEクラスタをAnthosに登録します。GKEクラスタをAnthos登録するための方法(他社リンクサイト)は複数存在します。 GoogleCloudコントロールパネル上からも可能ですが、今回はニフクラ検証サーバーからgcloudコマンド登録(他社サイトリンク)を使ってGKEクラスタのAnthos登録を実施します。
gcloud認証プラグインインストール
ニフクラ検証サーバーからgcloudコマンドでGKEクラスタに接続するために認証プラグインをインストールします。 以下のコマンドを実行します。
$ apt-get install google-cloud-sdk-gke-gcloud-auth-plugin ---------省略--------- Unpacking google-cloud-sdk-gke-gcloud-auth-plugin (449.0.0-0) ... Setting up google-cloud-sdk-gke-gcloud-auth-plugin (449.0.0-0) ...
gcloudコマンドコピー
GoogleCloudコントロールパネルからgcloudコマンドラインアクセスをコピーします。


gcloudコマンド実行
コピーしたgcloudコマンドをニフクラ環境の検証サーバーで実行します。
$ gcloud container clusters get-credentials xxxxxxxxxxxxxxxx Fetching cluster endpoint and auth data. kubeconfig entry generated for nifc-anthosgke-cls.
GKEクラスタの認証情報を取得が完了です。
gcloudコマンドでAnthosクラスタを登録
gcloudコマンド登録(他社サイトリンク)に従って以下のコマンドを実行します。
- メンバーシップ名称はクラスタ名と同じ nifc-anthosgke-cls を設定します。
- ロケーションの値はGKE作成で選択したロケーションなので us-central1-c を設定します。
- --enable-workload-identityは固定値の設定です。
$ gcloud container fleet memberships register nifc-anthosgke-cls --gke-cluster=us-central1-c/nifc-anthosgke-cls --enable-workload-identity
コントロールパネルでAnthos登録が確認できます。

以上でGKEクラスタのAnthos登録は完了です。
ニフクラ環境上でGKEクラスタでのコマンド操作について
GKEクラスタ認証情報を取得している場合、ニフクラ環境の検証サーバーからkubectlコマンドでGKEクラスタを操作できます。切り替え表示と簡略化操作について少し解説します。
GKEクラスタ認証情報取得
上記gcloud実行で認証情報は取得しています。
以下のkubectlコマンドを実行してGKEクラスタに接続したことを確認します。
※ アスタリスク* が先頭に付与されている。
$ kubectl config get-contexts
CURRENT NAME CLUSTER AUTHINFO NAMESPACE
* gke_xxxx_us-central1-c_nifc-anthosgke-cls gke_xxxxxx_us-central1-c_nifc-anthosgke-cls gke_xxxxxx_us-central1-c_nifc-anthosgke-cls
nifc-anthosbm-cls-admin@nifc-anthosbm-cls nifc-anthosbm-cls nifc-anthosbm-cls-admin
この状態だとGKEクラスタに接続してます。

以下のkubectlコマンドを実行してクラスタを切り替えます。
kubectl config use-context クラスタ名
ニフクラ環境のAnthos on bare metalクラスタに接続するために切り替える場合は以下のコマンドを実行します。
kubectl config use-context standalone-admin@standalone
以下のkubectlコマンドを実行してニフクラ環境のAnthos on bare metalクラスタに接続したことを確認できます。
$ kubectl config get-contexts
CURRENT NAME CLUSTER AUTHINFO NAMESPACE
gke_xxxx_us-central1-c_nifc-anthosgke-cls gke_xxxxxx_us-central1-c_nifc-anthosgke-cls gke_xxxxxx_us-central1-c_nifc-anthosgke-cls
* nifc-anthosbm-cls-admin@nifc-anthosbm-cls nifc-anthosbm-cls nifc-anthosbm-cls-admin
この状態だとニフクラ環境のAnthos on bare metalクラスタに接続してます。

操作簡略化の環境変数設定
切り替え操作を簡略化するためにクラスタ名を環境変数で以下のように設定します。
# Anthosクラスタ名※kubectl config get-contextsで表示された「NAME」項目の内容 export CTX_CLUSTER1=nifc-anthosbm-cls-admin@nifc-anthosbm-cls # GKEクラスタ名※kubectl config get-contextsで表示された「NAME」項目の内容 export CTX_CLUSTER2=gke_xxxxx_us-central1-c_nifc-anthosgke-cls
以下のように --contextパラメーター にクラスタ名を設定することで対象のクラスタをkubectlコマンドで操作できます。
ニフクラ環境のAnthos on bare metalクラスタの場合
kubectl --context=${CTX_CLUSTER1} get pods等

GKEクラスタの場合
kubectl --context=${CTX_CLUSTER2} get pods等

次回以降の検証では、kubectlコマンド操作は --context=${CTX_CLUSTER1}、--context=${CTX_CLUSTER2} を用いて実行します。
第3回. マルチクラスタメッシュ構成_East-WestGateway作成編
第4回. マルチクラスタメッシュ構成_疎通確認編
以上でGKEクラスタでのコマンド操作についての解説は終了です。
ニフクラ環境からGoogleCloud環境へ拠点間VPNゲートウェイ接続疎通確認
ニフクラ環境からGoogleCloud環境へpingを実行して疎通確認を実施します。
GoogleCloudのGKEクラスタ内部IP確認
GoogleCloudコンソールの「VMインスタンス」ページに移動します。
作成したGoogleCloudのGKEクラスタの内部IPを確認します。
確認した内部IPの1つをメモ等で記憶しておきます。

ping実行
ニフクラのクラスタからGoogleCloudのクラスタ(yyy.yyy.yyy.yyy)にpingを実行して疎通確認をします。 以下のコマンドを実行します。クラスタ上に一時的にalpineイメージ(他社サイトリンク)からpingを実行します。
※ニフクラ環境で実行するために--context=${CTX_CLUSTER1}付与します。
$ kubectl run --context=${CTX_CLUSTER1} -it debug --image=alpine:latest --rm --restart=Never -- ping yyy.yyy.yyy.yyy(作成したGoogleCloudのGKEクラスタの内部IP)
If you don't see a command prompt, try pressing enter.
64 bytes from yyy.yyy.yyy.yyy: seq=1 ttl=60 time=153.506 ms
64 bytes from yyy.yyy.yyy.yyy: seq=2 ttl=60 time=150.889 ms
64 bytes from yyy.yyy.yyy.yyy: seq=3 ttl=60 time=154.262 ms
ping応答が返却されて疎通が確認できます。
GoogleCloud環境からニフクラ環境へ拠点間VPNゲートウェイ接続疎通確認
GoogleCloud環境からニフクラ環境へpingを実行して疎通確認を実施します。
GoogleCloudクラスタのマスカレードエージェント作成
GoogleCloud上のGKEクラスタが異なるネットワークのクラスタと通信するためにIP マスカレード エージェント(他社サイトリンク)を作成します。

作業ディレクトリ作成
mkdirコマンドで作業ディレクトリを作成します。
※今回はmasqで作成します。
$ mkdir masq
マニュフェストファイル作成
viコマンドでマニュフェストファイル(nifc-masq.yaml)を作成します。
$ vi masq/nifc-masq.yaml
ip-masq-agent DaemonSet のデプロイ(他社サイトリンク)の内容をコピーして マニュフェストファイル(nifc-masq.yaml)を保存します。
マスカレード作成
kubectlコマンドを実行してマスカレードを作成します。
kubectl apply -f masq/nifc-masq.yaml --context=${CTX_CLUSTER2}
GKEクラスタの送信元PodのIP アドレスを保護するためConfigファイル(config)を作成します。 anthos-hybridのus-central1リージョンの内部IP範囲を nonMasqueradeCIDRs に設定します。
$ vi masq/config
nonMasqueradeCIDRs:
- yyy.yyy.yyy.yyy/20(anthos-hybridのus-central1リージョンの内部IP範囲)
masqLinkLocal: false
resyncInterval: 60s
kubectlコマンドを実行してConfigMapを作成します。
$ kubectl create configmap ip-masq-agent \
--from-file masq/config \
--namespace kube-system \
--context=${CTX_CLUSTER2}
kubectlコマンドを実行して確認します。
※GoogleCloud環境で実行するために--context=${CTX_CLUSTER2}付与します。
$ kubectl describe configmaps/ip-masq-agent -n kube-system --context=${CTX_CLUSTER2}
Name: ip-masq-agent
Namespace: kube-system
Labels: <none>
Annotations: <none>
Data
====
config:
----
nonMasqueradeCIDRs:
- yyy.yyy.yyy.yyy/20(anthos-hybridのus-central1リージョンの内部IP範囲)
masqLinkLocal: false
resyncInterval: 60s
BinaryData
====
---------省略---------
マスカレードエージェント作成は完了です。
ping実行
GoogleCloudのクラスタからニフクラのクラスタ(172.16.232.1)にpingを実行して疎通確認をします。
※GoogleCloud環境で実行するために--context=${CTX_CLUSTER2}付与します。
$ kubectl run --context=${CTX_CLUSTER2} -it debug --image=alpine:latest --rm --r start=Never -- ping 172.16.232.1
If you don't see a command prompt, try pressing enter.
64 bytes from 172.16.232.1: seq=1 ttl=63 time=0.079 ms
64 bytes from 172.16.232.1: seq=2 ttl=63 time=0.129 ms
64 bytes from 172.16.232.1: seq=3 ttl=63 time=0.177 ms
以上でニフクラとGoogleCloudの拠点間VPNゲートウェイ接続疎通確認は完了です。
まとめ
今回はGoogleCloudにKubernetesクラスタを作成してニフクラのKubernetesクラスタと通信ができることを確認しました。
次回はサービスメッシュにIstioベースのAnthos Service Mesh(ASM)(他社サイトリンク)を利用してクラスタ間で負荷分散するマルチクラスタメッシュ(他社サイトリンク)構成の構築方法を紹介します。
最後までお読みくださいましてありがとうございました。
注意事項
- 本記事に記載されている会社名、製品名等の固有名詞は各社の商号、登録商標または商標です。
- 本記事の他社サイトへのリンクにつきまして、リンク切れの際はご容赦ください。
- 本記事は、2023年10月時点の情報です。
