kubernetes - 如何使用 Kubernetes 为 Pod 分配静态 IP

标签 kubernetes kubectl

目前 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/

相关文章:

kubernetes - Kubernetes-Pod仍处于ContainerCreating状态

https - 在 GKE 上为入口 Controller IP 地址配置 FQDN

bash - 循环输出并在 bash 中删除

kubernetes - 您如何像 EC​​S 服务一样将服务帐户附加到 gke 部署/服务?

kubernetes - 对于 NodePort 类型的服务,并且指定了 port 和 targetPort,这意味着什么?

Kubernetes 无法运行容器

Kubernetes Secret通过删除持续存在

docker - kubernetes集群无法初始化

java - Docker 容器中的微服务

kubernetes - 解析 templates/deployment.yaml 时出错 : json: line 1: invalid character '{' looking for beginning of object key string