-
Notifications
You must be signed in to change notification settings - Fork 452
用户自定义 VPC
oilbeater edited this page Jun 27, 2022
·
11 revisions
Wiki 下的中文文档将不在维护,请访问我们最新的中文文档网站,获取最新的文档更新。
从 1.6 版本开始,用户可以创建自定义 VPC,不同 VPC 之间网络独立,可以自由配置VPC内的IP地址段、子网,支持为自定义 VPC 配置路由。
用户自定义 VPC 逻辑上为强隔离模式网络,VPC 之间不能进行直接通信,VPC 也无法直接访问宿主机地址。每个 VPC 出网需要有各自独立的网关。
在不使用自定义 VPC 的情况下,所有子网使用系统默认 VPC,功能和之前保持一致,正常使用之前的子网出网方式。
kind: Vpc
apiVersion: kubeovn.io/v1
metadata:
name: test-vpc-1
spec:
namespaces:
- ns1
---
kind: Vpc
apiVersion: kubeovn.io/v1
metadata:
name: test-vpc-2
spec: {}
其中 namespaces
列表可以限定 VPC 内子网能够绑定的 Namespace,不设置则无限制
kind: Subnet
apiVersion: kubeovn.io/v1
metadata:
name: net1
spec:
vpc: test-vpc-1
namespaces:
- ns1
cidrBlock: 10.0.1.0/24
default: true
natOutgoing: false
---
kind: Subnet
apiVersion: kubeovn.io/v1
metadata:
name: net2
spec:
vpc: test-vpc-2
cidrBlock: 10.0.1.0/24
natOutgoing: false
以上示例中两个子网分别属于不同的VPC,所以可以使用相同的IP网段
apiVersion: v1
kind: Pod
metadata:
annotations:
ovn.kubernetes.io/logical_switch: net1
namespace: default
name: vpc1-pod
---
apiVersion: v1
kind: Pod
metadata:
annotations:
ovn.kubernetes.io/logical_switch: net2
namespace: default
name: vpc2-pod
同时支持基于目标地址policyDst
的静态路由和基于源地址policySrc
的策略路由,用户根据需要对流量进行引导编排
kind: Vpc
apiVersion: kubeovn.io/v1
metadata:
name: test-vpc-1
spec:
staticRoutes:
- cidr: 0.0.0.0/0
nextHopIP: 10.0.1.254
policy: policyDst
- cidr: 172.31.0.0/24
nextHopIP: 10.0.1.253
policy: policySrc
自定义vpc可以通过vpc网关访问外网。
自定义vpc网关依赖多网卡实现,首先确认环境上安装了Multus-CNI 和 macvlan CNI。
Multus-CNI 安装参考 multus-cni
- 配置ConfigMap,名称固定为
ovn-vpc-nat-gw-config
kind: ConfigMap
apiVersion: v1
metadata:
name: ovn-vpc-nat-gw-config
namespace: kube-system
data:
image: 'kubeovn/vpc-nat-gateway:v1.10.0' # vpc网关pod使用的镜像
enable-vpc-nat-gw: 'true' # 'true' for enable, 'false' for disable
nic: eth1 # 连接物理网络的网卡,macvlan依赖这个网卡来创建附属网卡
首先确认创建了configMap,kube-ovn-controller使用这个作为开关,检查是否创建vpc网关,并且创建附属网卡的crd。
- 创建vpc-nat-gw crd资源
kind: VpcNatGateway
apiVersion: kubeovn.io/v1
metadata:
name: ngw
spec:
vpc: test-vpc-1 # vpc网关属于哪个自定义vpc
subnet: sn # 自定义vpc下的子网
lanIp: 10.0.1.254 # vpc网关pod的固定IP地址,在指定的子网范围内
eips: # 分配给网关pod的Underlay IPs
- eipCIDR: 192.168.0.111/24
gateway: 192.168.0.254
- eipCIDR: 192.168.0.112/24
gateway: 192.168.0.254
floatingIpRules:
- eip: 192.168.0.111
internalIp: 10.0.1.5
dnatRules:
- eip: 192.168.0.112
externalPort: '8888'
protocol: tcp
internalIp: 10.0.1.10
internalPort: '80'
snatRules:
- eip: 192.168.0.112
internalCIDR: 10.0.1.0/24
selector: # 网关pod的 NodeSelector, 数组类型,数组成员为字符串类型,格式为 key:value 格式
- "kubernetes.io/hostname: kube-ovn-worker"
- "kubernetes.io/os: linux"
- 添加到vpc网关Pod的静态路由
kind: Vpc
apiVersion: kubeovn.io/v1
metadata:
name: test-vpc-1
spec:
staticRoutes:
- cidr: 0.0.0.0/0
nextHopIP: 10.0.1.254 # 下一跳指向vpc网关pod,填写 vpc-nat-gw crd中指定的 lanIp 地址
policy: policyDst
- 自定义 VPC 内的网络和主机网络不能互通