hostlocal网络
从4.0版本开始,平台支持了一种特殊的经典网络模式:hostlocal(宿主机本地网络)。这种模式专门为容器主机设计,在一台宿主机上实现了一个本地的网络环境,仅在宿主机内可见(类似docker0)。
1. 实现效果
容器主机使用hostlocal网络实现如下效果:
- 网络隔离 容器内可以分配一个独立的IP地址,但容器之间无法互相访问该IP地址,容器内只能通过该IP地址访问外部网络或者被外部网络访问
- 访问外部网络 容器访问外部网络时,自动在宿主机上进行SNAT,使用宿主机的IP地址访问外部网络
- 暴露服务端口 可以配置host_local网卡的port_mapping规则,将宿主机上的TCP或UDP端口映射到容器主机内的指定端口,外部网络通过访问宿主机的指定端口实现主动访问容器主机内的对应端口
2. 工作原理
host_local类型的IP子网配置在二层网 络上,宿主机上host服务启动时,会拉取本宿主机所对接的二层网络的所有host_local IP子网,并将这些IP子网的网关配置在对应二层网络的网桥设备上。同时,配置openvswitch流表,实现: (1)阻止容器网络内节点之间互相访问; (2)实现容器访问外网的SNAT规则; (3)配置端口映射规则,实现外部访问宿主机端口并转发到容器内端口的DNAT规则。
3. 配置方法
配置 host_local IP子网
新建host_local类型的经典网络IP子网,需要选择对应宿主机对接的二层网络。
部署控制节点时,会自动创建一个默认的hostlocal网络vh0,可以直接使用这个vh0网络,不一定需要新建。
重启host服务
如果配置了新的host_local IP子网后,需要重启该子网对应二层网络对接的宿主机上的host服务。服务启动时,会自动拉取host local子网的配置信息,将host_local的网关IP地址配置在二层网络对应的网桥上。
配置port_mapping
如果需要从外部网络 访问容器内服务端口,可以给容器的虚拟网卡配置端口映射规则,命令如下:
climc server-network-update --port-mapping <PORT_MAPPING_RULE> <SID> <NID>
其中,PORT_MAPPING_RULE支持规则字段如下:
| 字段 | 说明 | 是否可选 |
|---|---|---|
| port | 容器内服务端口 | 必填 |
| protocol | 端口协议,tcp或者udp | 必填 |
| host_port | 对应的宿主机端口 | 必填 |
| host_port_range | 如果不指定host_port,则从host_port_range中自动选择一个可用的随机端口,不指定则默认为20000-25000. | 可选 |
| remote_ips | 访问该端口的白名单列表,多个用 | 隔开。不指定则无限制。 | 可选 |
一个网卡允许指定多个port_mapping规则。
一般不建议指定host_port,而是由系统自动分配,这样可以避免不必要的host端口冲突。
配置安全组
容器主机默认可以访问任意的外部网络,包括宿主机的IP地址,云平台内的其他虚拟机的IP地址。为了组织容器访问这些基础设施IP地址,可以设置容器主机的安全组。