在谷歌云上自建 K8s 集群并使用 VPC Native 方式实现容器网络互通

概述
谷歌云使用先进的 Andromeda 网络来实现 VPC 内实例之间的相互访问 , 以及 google Kubernetes Engine (GKE) 的 Pod 的跨节点互访 , 避免了配置静态路由或者 Overlay 网络带来的运维复杂度以及性能瓶颈 。使用谷歌云的 VPC Native(使用 IP Alias 而非静态路由)方式来实现 Pod 间网络通讯的集群称作为 VPC 原生(VPC Native)集群 。VPC 原生集群具有以下优势 。

  • Pod IP 地址可在集群的 VPC 网络和通过 VPC 网络对等互连与之相连的其他 VPC 网络中进行原生路由 。
  • 在集群中创建 Pod 之前 , Pod IP 会预留在 VPC 网络中 。这可防止与 VPC 网络中其他资源发生冲突 , 让您更好地规划 IP 地址分配 。
  • Pod IP 地址范围不依赖于自定义静态路由 。它们不会消耗系统生成的路由配额和自定义静态路由配额 。自动生成的子网路由处理 VPC 原生集群的路由 。
  • 您可以创建仅应用于 Pod IP 地址范围而不是集群节点上任何 IP 地址的防火墙规则 。
  • 通常 , Pod IP 地址范围和子网次要 IP 地址范围可以通过 Cloud Router 与连接到 Cloud VPN 或 Cloud Interconnect 的本地网络访问 。
这些先进的网络功能 , 也可以提供给用户在谷歌云虚机实例上自建的 Kubernetes 集群来使用 。本文介绍了相关的配置和测试方法 。
一 创建 VPC
1 创建 VPC
首先创建 VPC:
gcloud compute networks createk8s-vpc--subnet-mode=custom--bgp-routing-mode=global--mtu=1500
2 创建 VPC 防火墙规则
在 VPC 中添加防火墙规则:
gcloud compute firewall-rulescreate k8s-vpc-default-firewall--network k8s-vpc --allow tcp:22,tcp:80,tcp:3389,icmpgcloud compute firewall-rules create k8s-vpc-k8s-firewall--network k8s-vpc--allowtcp:6443,tcp:2379-2380,tcp:10250-10252,tcp:30000-327673 创建子网
创建子网 asia-southeast1-sub-1 。为其规划如下网段 。
  • Node 网段:10.122.16.0/21
  • Pod 网段:192.168.16.0/21
  • Service 网段:172.16.16.0/21
gcloud compute networks subnetscreate asia-southeast1-sub-1--network=k8s-vpc--range=10.122.16.0/21--region=asia-southeast1给子网配置从属网段
gcloud compute networks subnetsupdate asia-southeast1-sub-1--region=asia-southeast1--add-secondary-ranges=asia-southeast1-sub-1-pod=192.168.16.0/21gcloud compute networks subnets update asia-southeast1-sub-1--region=asia-southeast1--add-secondary-ranges=asia-southeast1-sub-1-svc=172.16.16.0/21二 创建虚拟机
1 创建 K8s 集群的 Master 和 Node 虚机 。
每个 Node 会有一个由 Master 自动分配的 Pod CIDR , 需要根据这个网段来配置每个 Node 虚机实例的 Alias IP Range , 本例分配的情况如下 。
  • Node-1
  • Pod CIDR: 192.168.17.0/24
  • Alias IP: 192.168.17.0/24
  • Node-2
  • Pod CIDR: 192.168.18.0/24
  • Alias IP: 192.168.18.0/24
注意打开 IP Forward 并配置 Alias IP 网段给 Pod 使用 。
 
A Master
注意 Master 需要绑定一个有权限创建负载均衡的 Service Account , 以及谷歌云 API 调用范围 , 否则 , 创建 Kubernetes 的 Service 时自动创建谷歌云负载均衡会失败 。
gcloudcompute instances create kub-m--project=youzhi-lab--zone=asia-southeast1-b--machine-type=n2-standard-2--network-interface=network-tier=PREMIUM,subnet=asia-southeast1-sub-1--can-ip-forward--maintenance-policy=MIGRATE--image=centos-7-v20210721--image-project=centos-cloud--boot-disk-size=100GB--no-boot-disk-auto-delete--boot-disk-type=pd-balanced--boot-disk-device-name=kub-m--no-shielded-secure-boot--shielded-vtpm--shielded-integrity-monitoring--reservation-affinity=any--service-account=247839977271-compute@developer.gserviceaccount.com--scopes=https://www.googleapis.com/auth/cloud-platform
B Node-1
gcloudcompute instances create kub-n-1--project=youzhi-lab--zone=asia-southeast1-b--machine-type=n2-standard-4--network-interface=network-tier=PREMIUM,subnet=asia-southeast1-sub-1--can-ip-forward--maintenance-policy=MIGRATE--image=centos-7-v20210721--image-project=centos-cloud--boot-disk-size=100GB--no-boot-disk-auto-delete--boot-disk-type=pd-balanced--boot-disk-device-name=kub-n-1--no-shielded-secure-boot--shielded-vtpm--shielded-integrity-monitoring--reservation-affinity=any
C Node-2
gcloudcompute instances create kub-n-2--project=youzhi-lab--zone=asia-southeast1-b--machine-type=n2-standard-4--network-interface=network-tier=PREMIUM,subnet=asia-southeast1-sub-1--can-ip-forward--maintenance-policy=MIGRATE--image=centos-7-v20210721--image-project=centos-cloud--boot-disk-size=100GB--no-boot-disk-auto-delete--boot-disk-type=pd-balanced--boot-disk-device-name=kub-n-2--no-shielded-secure-boot--shielded-vtpm--shielded-integrity-monitoring--reservation-affinity=any


推荐阅读