HOWTOGCP VPCの間のサイトツーサイトVPNを使用している個人的なGKEクラスタに接続してください.
8874 ワード
... そして、二重のNATEのUbiquiti夢機械プロ
何を待ちますか.Kubernetesクラスタに安全な方法でアクセスしたいだけです.容易であるべきです.
Googleから[ 2022 - 03 - 10 ]更新!私たちは、このメッセージを得ました:「我々は、2022年6月15日から始まることを知っているように、我々はあなたにピア雲VPNゲートウェイのインターネットキー交換(Ike)アイデンティティの制限を取り除きます」ということを知らせています
これは、リモートのIPがリモートIDに一致するようにGCPが要求しないので、NAT ' edセットアップが管理しやすくなることを意味します.
アットGOALS 我々は、ネイティブの雲であり、我々はセキュリティについて真剣です.結果として、我々のKubernetesクラスタはprivate endpoints only , すべてのノードが内部のIPアドレスを持つところ.これは素晴らしいです、しかし、質問はすぐに到着します-我々がVPCの外からそれにアクセスすることができないとき、どのように我々はそのようなクラスタを運営しますか?
ここに、我々が持っているものの高レベルの概要があります
図の上部には、プライベートのGoogle管理Kubernetes(GKE)クラスタが表示されます.Kubernetesクラスタは、制御プレーンと労働者ノードから成ります.GKEの場合、Googleはコントロールプレーン(APIサーバー、ETCDノードなど)を管理し、下にあるVMのコントロールプレーンがオンになっており、下にあるVMの作業者ノードが動いている.
我々は自身のVPCと労働者ノードが動いているサブネットをセットアップしました、そして、Googleは制御飛行機が走っている管理されたVPCをつくります.Googleは自動的に我々のVPCで制御プレーンVPCを支持します.
図の下に、オフィススペースネットワークの概要があります.スタートアップしているので、オフィススペースを借りて、ネットワークを他のテナントと共有します.我々はオフィススペースネットワークに遍在ドリームマシンProを接続し、我々は我々のワークステーションを接続する独自の目標ネットワークを作成しました.
明らかに走る
インフラに関するノート
使用するTerraform すべてのGCPリソースを供給する.Googleは、GCP資源を管理するために、組織化されたterraformモジュールを提供しますhere .
我々の間接取引shared VPC そして、我々はproject factory モジュールを使用してホストプロジェクトとサービスプロジェクトを作成します.
VPNはVPCを所有するホストプロジェクトでプロビジョニングされます.
私たちのGKEクラスタはprivate cluster 地形形モジュール
必要条件と準備
我々が始める前に我々が確実にする若干のものと我々が集めなければならない若干の情報があります.
第一に、我々はUbiquiti Dream Machine(UDM)への管理アクセスを必要とします、そして、我々はネットワーク管理管理者と共にGoogleユーザーを必要とします.
さて、次のようにまとめる必要があります. オフィススペース外部IPアドレス、EG 123.45.67.89
目標ネットワークサブネット範囲、EG 192.168.1.0/24
Kubernetesクラスタが準備されることを確認してください
つの構成エントリは、クラスタへのVPNアクセスを可能にするためにGKEを設定するときに正しく取得するために必要です. VPCペアリングはカスタムルートをエクスポートするように設定する必要があります-この特定の場合では、VPNがVPCからオフィスネットワークへの通信を可能にするために作成されるカスタムネットワークルートがGKE制御プレーンをホストするGoogle Managed VPCでも利用可能であることを意味します.これは、GKE設定に次の地形形式を追加することによって可能になります.
共有VPN秘密
それは、VPNピアの認証のために使用される共有秘密を生成し、新しい秘密にGCP秘密マネージャでは、名前のITオフィスVPN共有秘密.
クラウド・ゲートウェイ
この部分についてはVPN これをホストプロジェクトで設定します.
The
設定を適用した後、VPNトンネルはエラー状態になります.なぜなら、それはピアに接続できないからです.これはUDM側をまだ設定していないためです.
UDMプロの上でVPNネットワークをつくってください
UDM Proは私が知っている限りではコードによる設定をサポートしていませんので、ここでManual GUIを手動で使用する必要があります.
設定→→Network ->新しいネットワークを追加し、名前を選択し、VPN -> Advanced -> site to site -> manual ipsecを選択します.
事前共有秘密鍵は
パブリックIPアドレス(WAN)は、UDMがオフィススペースネットワーク上にあるIPアドレスです.例えば
リモートゲートウェイ/サブネットセクションでは、オフィスからアクセスしたいVPCのサブネット範囲を追加します
リモートIPアドレスは、GCPのVPNエンドポイント用に作成された公開静的IPです
「詳細」セクションを展開し、選択する
新しいネットワークを保存します.
残念ながら私たちはまだ準備ができていません.現在の設定ではUDMは設定したWAN IPを使用して自分自身を識別します.
設定の最後の部分を修正するには
最後に、IPsec設定を更新します.
それはthats!
UDMの接続が起動して起動することを確認します.
現在、GCPのVPNトンネル状態は同様に緑の状態に動きます.
そして、最後に、ゴールオフィスネットワークのワークステーションからKubernetesクラスタにアクセスすることは可能です.
トラブルシューティング
UDMに接続している間に
時々、ルートはワークステーションでキャッシュされます
何を待ちますか.Kubernetesクラスタに安全な方法でアクセスしたいだけです.容易であるべきです.
Googleから[ 2022 - 03 - 10 ]更新!私たちは、このメッセージを得ました:「我々は、2022年6月15日から始まることを知っているように、我々はあなたにピア雲VPNゲートウェイのインターネットキー交換(Ike)アイデンティティの制限を取り除きます」ということを知らせています
これは、リモートのIPがリモートIDに一致するようにGCPが要求しないので、NAT ' edセットアップが管理しやすくなることを意味します.
アットGOALS 我々は、ネイティブの雲であり、我々はセキュリティについて真剣です.結果として、我々のKubernetesクラスタはprivate endpoints only , すべてのノードが内部のIPアドレスを持つところ.これは素晴らしいです、しかし、質問はすぐに到着します-我々がVPCの外からそれにアクセスすることができないとき、どのように我々はそのようなクラスタを運営しますか?
ここに、我々が持っているものの高レベルの概要があります
図の上部には、プライベートのGoogle管理Kubernetes(GKE)クラスタが表示されます.Kubernetesクラスタは、制御プレーンと労働者ノードから成ります.GKEの場合、Googleはコントロールプレーン(APIサーバー、ETCDノードなど)を管理し、下にあるVMのコントロールプレーンがオンになっており、下にあるVMの作業者ノードが動いている.
我々は自身のVPCと労働者ノードが動いているサブネットをセットアップしました、そして、Googleは制御飛行機が走っている管理されたVPCをつくります.Googleは自動的に我々のVPCで制御プレーンVPCを支持します.
図の下に、オフィススペースネットワークの概要があります.スタートアップしているので、オフィススペースを借りて、ネットワークを他のテナントと共有します.我々はオフィススペースネットワークに遍在ドリームマシンProを接続し、我々は我々のワークステーションを接続する独自の目標ネットワークを作成しました.
明らかに走る
kubectl describe nodes
私たちのオフィスネットワークのワークステーションからkubectl
クラスタのAPIサーバへのアクセスが必要です.それで、どのように我々は安全な方法で我々のVPCに我々のオフィスネットワークを接続することができて、使用しているGKEクラスタの管理を可能にしますkubectl
?インフラに関するノート
使用するTerraform すべてのGCPリソースを供給する.Googleは、GCP資源を管理するために、組織化されたterraformモジュールを提供しますhere .
我々の間接取引shared VPC そして、我々はproject factory モジュールを使用してホストプロジェクトとサービスプロジェクトを作成します.
VPNはVPCを所有するホストプロジェクトでプロビジョニングされます.
私たちのGKEクラスタはprivate cluster 地形形モジュール
必要条件と準備
我々が始める前に我々が確実にする若干のものと我々が集めなければならない若干の情報があります.
第一に、我々はUbiquiti Dream Machine(UDM)への管理アクセスを必要とします、そして、我々はネットワーク管理管理者と共にGoogleユーザーを必要とします.
さて、次のようにまとめる必要があります.
Kubernetesクラスタが準備されることを確認してください
つの構成エントリは、クラスタへのVPNアクセスを可能にするためにGKEを設定するときに正しく取得するために必要です.
master_authorized_networks
Office Networkサブネット範囲を含む必要があります.module "kubernetes_cluster" {
source = "terraform-google-modules/kubernetes-engine/google//modules/private-cluster"
version = "18.0.0"
...
}
resource "google_compute_network_peering_routes_config" "peering_gke_routes" {
peering = module.kubernetes_cluster.peering_name
network = var.vpc_id
import_custom_routes = false
export_custom_routes = true
}
共有VPN秘密
それは、VPNピアの認証のために使用される共有秘密を生成し、新しい秘密にGCP秘密マネージャでは、名前のITオフィスVPN共有秘密.
クラウド・ゲートウェイ
この部分についてはVPN これをホストプロジェクトで設定します.
locals {
name = "office-vpn"
}
resource "google_compute_address" "vpn_external_ip_address" {
project = var.project_id
name = local.name
network_tier = "PREMIUM"
region = var.region
address_type = "EXTERNAL"
}
data "google_secret_manager_secret_version" "office_vpn_shared_secret" {
project = var.project_id
secret = "office-vpn-shared-secret"
}
module "office_site_to_site" {
source = "terraform-google-modules/vpn/google"
version = "2.2.0"
project_id = var.project_id
network = var.vpc_id
region = var.region
gateway_name = local.name
tunnel_name_prefix = local.name
shared_secret = data.google_secret_manager_secret_version.office_vpn_shared_secret.secret_data
ike_version = 2
peer_ips = [ var.office_public_ip ]
remote_subnet = var.office_subnet_ranges
vpn_gw_ip = resource.google_compute_address.vpn_external_ip_address.address
}
resource "google_compute_firewall" "allow_office_traffic" {
project = var.project_id
name = "${local.name}-allow-office-traffic"
network = var.vpc_id
description = "Allow traffic from the office network"
allow { protocol = "icmp" }
allow {
protocol = "udp"
ports = [ "0-65535" ]
}
allow {
protocol = "tcp"
ports = [ "0-65535" ]
}
source_ranges = var.office_subnet_ranges
}
google_compute_address.vpn_external_ip_address
GCP終了時にVPNエンドポイントとなる外部の静的IPアドレスを作成します.google_secret_manager_secret_version.office_vpn_shared_secret
VPNピアを認証するために使用される共有秘密を取得します.The
office_site_to_site
モジュールは"クラシック"クラウドVPNを作成します.UDMはBGPをサポートしていませんが、これは「HAクラウドVPN」バリアントを作成できないことを意味します.google_compute_firewall.allow_office_traffic
オフィスのサブネットから始まるトラフィックを許可します192.168.1.0/24
) VPCを入力します.設定を適用した後、VPNトンネルはエラー状態になります.なぜなら、それはピアに接続できないからです.これはUDM側をまだ設定していないためです.
UDMプロの上でVPNネットワークをつくってください
UDM Proは私が知っている限りではコードによる設定をサポートしていませんので、ここでManual GUIを手動で使用する必要があります.
設定→→Network ->新しいネットワークを追加し、名前を選択し、VPN -> Advanced -> site to site -> manual ipsecを選択します.
事前共有秘密鍵は
office-vpn-shared-secret
上から.パブリックIPアドレス(WAN)は、UDMがオフィススペースネットワーク上にあるIPアドレスです.例えば
192.168.10.150
.リモートゲートウェイ/サブネットセクションでは、オフィスからアクセスしたいVPCのサブネット範囲を追加します
10.0.0.0/8
and 172.16.0.0/16
.リモートIPアドレスは、GCPのVPNエンドポイント用に作成された公開静的IPです
123.45.67.99
.「詳細」セクションを展開し、選択する
IKEv2
. PFSとダイナミックルーティングを有効にします.新しいネットワークを保存します.
残念ながら私たちはまだ準備ができていません.現在の設定ではUDMは設定したWAN IPを使用して自分自身を識別します.
設定の最後の部分を修正するには
ssh
UDMプロに入ります.一度マシン上では、IPsecの設定を更新することができます.$ cd /run/strongswan/ipsec.d/tunnels
$ vi <ipsec-config-name>.config
以下の行をleft=192.168.10.150
行 leftid=123.45.67.99
これは、UCPがGCP端のVPNに接続するとき、それが実際の公共のIPを使用してそれ自体を識別するのを作ります.最後に、IPsec設定を更新します.
$ ipsec update
それはthats!
UDMの接続が起動して起動することを確認します.
$ swanctl --list-sas
出力はトンネルに関する情報を記載しなければならず、トンネルはESTABLISHED
状態.現在、GCPのVPNトンネル状態は同様に緑の状態に動きます.
そして、最後に、ゴールオフィスネットワークのワークステーションからKubernetesクラスタにアクセスすることは可能です.
$ kubectl get nodes
NAME STATUS ROLES AGE VERSION
gke-XXXXX-controller-pool-28b7a87b-9ff2 Ready <none> 17d v1.21.6-gke.1500
次のように設定します.トラブルシューティング
UDMに接続している間に
$ tcpdump -nnvi vti64
すべてのトラフィックをVPNトンネル経由でルーティングしてください.時々、ルートはワークステーションでキャッシュされます
$ sudo route -n flush
何度も無効にする/有効にする無線LANは、ルーティングの設定は、最新のことを確認します.Reference
この問題について(HOWTOGCP VPCの間のサイトツーサイトVPNを使用している個人的なGKEクラスタに接続してください.), 我々は、より多くの情報をここで見つけました https://dev.to/goals/howto-connect-to-a-private-gke-cluster-using-a-site-to-site-vpn-between-a-gcp-vpc-2akテキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol