Kubernetes pod可以关联多个IP地址吗



简短问题:

Kubernetes pod有办法关联多个IP地址吗?

即使只有环回的?

更长解释:

我有一个应用程序需要部署在Kubernetes pod中,并使用Cassandra。Cassandra本身位于防火墙后面,由于管理原因,无法从托管K8S景观的外部云直接打开防火墙进行IP访问。相反,我必须开发一个通过自定义隧道的中继。

应用程序中的Cassandra驱动程序将不指向真正的Cassandra集群,而是指向中继,然后中继将通过隧道连接。

我更喜欢在吊舱内运行中继(最好是在应用程序容器内(,以最大限度地减少数据遍历的次数,因为数据传输率会很高,还可以最大限度地降低要管理的不同故障点和组件的数量,还提供了一种与应用程序副本协同扩展的措施(应用程序是自动扩展的,可能会扩展到大量副本(。

然而,问题是Cassandra驱动程序通过节点IP地址连接到Cassandra集群中的每个节点,例如,如果Cassandra群集是三个节点,则驱动程序连接到node1:9042、node2:9042和node3:9042。端口号由所有连接强制共享。驱动程序不允许指定node1:9042、node2:9043和node3:9044。因此,我无法让驱动程序连接到此pod:9042、此pod:9043和此pod:1904 4。如果可能的话,我可以在容器内运行一个中继,监听三个端口,然后转发连接。然而,由于Cassandra驱动程序的限制,中继侦听端点必须具有不同的IP地址(我宁愿避免制作自定义修改版本的驱动程序来取消此限制(。

这就引出了一个问题:pod有可能关联额外的IP地址吗?

地址的类型无关紧要,只要在容器或pod中可以向该地址发送数据并从中接收数据即可。通信本质上是在contaner或pod中进行环回。如果它是一个非容器化的环境,但是普通的Linux虚拟机,我可以创建额外的环回接口,这将解决问题。但是无法在容器内部创建接口。

有没有办法让Kubernetes将额外的IP地址关联到pod?

要将其他IP地址与pod关联,可以使用Multus CNI。它允许您将多个网络接口连接到pod。它需要一个默认的吊舱间通信CNI(即Calico、Flannel(。

它的工作原理是创建一个NetworkAttachmentDefinition CRD,然后将其添加到pod清单的注释字段中。此外,您还可以为接口定义默认路由。示例用法:

CRD定义

apiVersion: "k8s.cni.cncf.io/v1"
kind: NetworkAttachmentDefinition
metadata:
name: macvlan-conf
spec:
config: '{
"cniVersion": "0.3.0",
"type": "macvlan",
"master": "eth0",
"mode": "bridge",
"ipam": {
"type": "host-local",
"subnet": "192.168.1.0/24",
"rangeStart": "192.168.1.200",
"rangeEnd": "192.168.1.216",
"routes": [
{ "dst": "0.0.0.0/0" }
],
"gateway": "192.168.1.1"
}
}'

吊舱清单:

apiVersion: v1
kind: Pod
metadata:
name: samplepod
annotations:
k8s.v1.cni.cncf.io/networks: macvlan-conf
spec:
containers:
- name: samplepod
command: ["/bin/ash", "-c", "trap : TERM INT; sleep infinity & wait"]
image: alpine

当你在pod运行时执行它时,你可以看到创建了一个额外的接口:

1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN qlen 1
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
2: eth0@if7: <BROADCAST,MULTICAST,UP,LOWER_UP,M-DOWN> mtu 1440 qdisc noqueue state UP 
link/ether 86:75:ed:87:a1:1a brd ff:ff:ff:ff:ff:ff
inet 192.168.171.65/32 scope global eth0
valid_lft forever preferred_lft forever
3: net1@tunl0: <BROADCAST,MULTICAST,UP,LOWER_UP,M-DOWN> mtu 1460 qdisc noqueue state UP 
link/ether 1a:58:6e:88:fb:f5 brd ff:ff:ff:ff:ff:ff
inet 192.168.1.200/24 scope global net1
valid_lft forever preferred_lft forever

最新更新