目前 kubectl 将 IP 地址分配给一个 pod,该 IP 地址在 pod 内由所有容器共享。
我正在尝试为 pod 分配一个静态 IP 地址,即在与 kubectl 分配的网络范围相同的网络范围内,我正在使用以下部署文件
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
name: redis
spec:
replicas: 1
template:
metadata:
labels:
run: rediscont
spec:
containers:
- name: redisbase
image: localhost:5000/demo/redis
ports:
- containerPort: 6379
hostIP: 172.17.0.1
hostPort: 6379
在部署它的 dockerhost 上,我看到以下内容:
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
4106d81a2310 localhost:5000/demo/redis "/bin/bash -c '/root/" 28 seconds ago Up 27 seconds k8s_redisbase.801f07f1_redis-1139130139-jotvn_default_f1776984-d6fc-11e6-807d-645106058993_1b598062
71b03cf0bb7a gcr.io/google_containers/pause:2.0 "/pause" 28 seconds ago Up 28 seconds 172.17.0.1:6379->6379/tcp k8s_POD.99e70374_redis-1139130139-jotvn_default_f1776984-d6fc-11e6-807d-645106058993_8c381981
IP 表保存提供以下输出
-A DOCKER -d 172.17.0.1/32 ! -i docker0 -p tcp -m tcp --dport 6379 -j DNAT --to-destination 172.17.0.3:6379
即使这样,也无法从其他 pod 访问 IP 172.17.0.1。
基本上问题是如何将静态 IP 分配给 pod,以便 172.17.0.3 不会被分配给它
最佳答案
通常,为 Pod 分配静态 IP 地址是 Kubernetes 环境中的一种反模式。您可能想要探索几种方法。使用服务来前端您的 Pod(或前端甚至只是一个 Pod)将为您提供稳定的网络身份,并允许您横向扩展您的工作负载(如果工作负载支持它)。或者,使用 StatefulSet 可能更适合某些工作负载,因为它会在 Pod 重新启动时保留启动顺序、主机名、PersistentVolumes 等。
我知道这不一定能直接回答您的问题,但希望它提供一些证明有用的附加选项或信息。
关于kubernetes - 如何使用 Kubernetes 为 Pod 分配静态 IP,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41566655/