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

问题描述 投票:0回答:1

简短的问题。

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

即使只是环回的地址?

较长的解释。

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

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

我非常希望在pod本身内部运行中继(甚至更好的是就在应用容器内部),以尽量减少数据遍历的次数,因为数据传输率会相当高,同时也尽量减少需要管理的不同故障点和组件的数量,还可以提供与应用复制的协同扩展措施(应用是自动扩展的,可能会有大量的复制)。

但问题是,Cassandra驱动通过节点IP地址与Cassandra集群中的每个节点进行连接,例如,如果Cassandra集群是三个节点,那么驱动就会连接到node1:9042、node2:9042和node3:9042。端口号是所有连接强制共享的。驱动程序不允许指定例如节点1:9042、节点2:9043和节点3:9044。因此,我不能让驱动程序连接到thispod:9042、thispod:9043和thispod:9044。如果可以的话,我可以让一个中继在容器内部运行,在三个端口上监听,然后转发连接。然而,由于Cassandra驱动的限制,中继监听端点必须有不同的IP地址(我宁可避免做一个自定义修改的驱动版本来解除这个限制)。

这就带来了一个问题:一个pod是否可以关联额外的IP地址?

地址的类型并不太重要,只要在一个容器或pod内可以向这个地址发送数据和接收数据就可以了。通信本质上是在容器或pod内的环回。如果是非容器环境,而是普通的Linux虚拟机,我可以创建额外的环回接口,这样就可以解决这个问题。但是在容器内部无法创建接口。

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

kubernetes
1个回答
0
投票

要将额外的IP地址与pod关联起来,你可以使用以下方法 Multus CNI. 它允许你将多个网络接口连接到pod上。它需要一个默认的CNI为pod-to-pod通信(即Calico,Flannel)。

它的工作原理是它创建了一个 NetworkAttachmentDefinition CRD,然后你再加上 注释栏 在pod manifest中。除此之外,您还可以定义 默认路线 的接口。使用实例。

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"
      }
    }'

Pod清单。

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
© www.soinside.com 2019 - 2024. All rights reserved.