Skip to content

用户自定义 VPC

oilbeater edited this page Jun 27, 2022 · 11 revisions

Wiki 下的中文文档将不在维护,请访问我们最新的中文文档网站,获取最新的文档更新。

从 1.6 版本开始,用户可以创建自定义 VPC,不同 VPC 之间网络独立,可以自由配置VPC内的IP地址段、子网,支持为自定义 VPC 配置路由。

用户自定义 VPC 逻辑上为强隔离模式网络,VPC 之间不能进行直接通信,VPC 也无法直接访问宿主机地址。每个 VPC 出网需要有各自独立的网关。

在不使用自定义 VPC 的情况下,所有子网使用系统默认 VPC,功能和之前保持一致,正常使用之前的子网出网方式。

使用步骤

1. 创建自定义 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,不设置则无限制

2. 创建子网

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网段

3. 创建Pod

参考 Pod 绑定 Subnet

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网关访问外网。

前提

自定义vpc网关依赖多网卡实现,首先确认环境上安装了Multus-CNI 和 macvlan CNI。

Multus-CNI 安装参考 multus-cni

配置步骤

  1. 配置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。

  1. 创建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"
  1. 添加到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 使用限制

  • 自定义 VPC 内的网络和主机网络不能互通
Clone this wiki locally