0x00 TLNR;
本文描述的一些场景如下, 可对号入座选择是否需要继续往下看 ^_^
假定我们已经创建了一个VPC,同时已经在这个VPC下面创建了一些PAAS服务, 比如数据库等资源.
此时, 我们希望在相同的VPC下面创建一个集群,方便在里面运行的Pod可以顺利访问相关数据服务.
为了减少后期运维成本, 我们使用全托管模式的K8s集群方案: fargate模式的EKS
0x01 基本概念:
下图是EKS要求的最低配置的网络集群拓扑图:
- 公网网关(Internet Gateway)
VPC中需要对外提供接口服务时, 需要创建的第一个对象. 负责进出两个方向的流量请求.
- 子网(Subnet)
如上图所示, 我们需要用到4个子网, 注意创建时,需要对应不同的可用区.
同时, 需要手动打开子网上的 自动分配IPv4的能力
同时添加相应的标签:
公用子网: kubernetes.io/role/elb: 1
私有子网: kubernetes.io/role/internal-elb: 1
- 路由表
负责目标IP的流量向什么目标发启请求, 主要有两个配置项:
- 关联子网: 定义了数据来源
- 路由表: 定义数据流到什么地方去
- NAT 网关
用于对私有网络(内部网络)提供地址转换能力.
注意在创建NAT网关的时候, 选择Public, 同时, 要选择一个公网子网.
- DMZ
如本文首页图片所示, DMZ下面的子网中, 一般用于创建nginx等纯数据转换的网络应用.
反之,一般会把真正的后台业务应用, 部署到私有子网下面.
0x02 创建集群
先准备一个配置文件: cluster.yml
apiVersion: eksctl.io/v1alpha5
kind: ClusterConfig
metadata:
name: cluster-name
region: us-west-2
vpc:
id: "vpc-id"
subnets:
private:
us-west-2a:
id: "subnet-0972711111"
us-west-2b:
id: "subnet-0e0fad2222"
public:
us-west-2a:
id: "subnet-093233333"
us-west-2b:
id: "subnet-0a9506444"
fargateProfiles:
- name: fp-default
selectors:
# All workloads in the "default" Kubernetes namespace will be
# scheduled onto Fargate:
- namespace: default
# All workloads in the "kube-system" Kubernetes namespace will be
# scheduled onto Fargate:
- namespace: kube-system
- namespace: sit
- namespace: prod
使用eksctl创建集群, 同时指定了fargate模式:
eksctl create cluster -f cluster.yml
关于fargate 配置信息, 简单说一下:
在集群相应的namespace下部署的内容, 会部署到EKS自己维护的Node上面,
这个Node对我们用户来说, 是透明的.
后记
集群创建完成后, 更新本地kubectl config 信息:
aws eks update-kubeconfig --name cluster-name
此时,就可以用kubectl命令进行远程集群操作了.
参考链接:
https://eksctl.io/usage/vpc-networking/