如何部署与主机操作系统具有相同IP地址的pod?

时间:2018-03-20 10:16:09

标签: kubernetes

例如,在使用kubeadm创建的Kubernetes集群环境中,管理Pod具有与主机IP地址相同的IP地址,如下所示。

[root@master1 ~]# kubectl get pods -n kube-system -o wide
NAME                              READY     STATUS              RESTARTS   AGE       IP              NODE
etcd-master1                      1/1       Running             13         49d       10.91.111.113   master1
kube-apiserver-master1            1/1       Running             18         49d       10.91.111.113   master1
kube-controller-manager-master1   1/1       Running             29         49d       10.91.111.113   master1
kube-proxy-6vrvb                  1/1       Running             13         81d       10.91.111.113   master1
kube-proxy-gsxcg                  1/1       Running             13         81d       10.91.111.114   worker1
kube-proxy-lcjvw                  1/1       NodeLost            1          64d       10.91.111.115   worker2
kube-scheduler-master1            1/1       Running             26         49d       10.91.111.113   master1

我想知道如何编写一个yaml文件,用于将与主机相同的IP地址分配给pod。

2 个答案:

答案 0 :(得分:1)

podSpec上的

添加hostNetwork: true

答案 1 :(得分:1)

您实际上无法为您的pod绑定相同的地址,但您可以在您的pod中使用HostNetwork,这实际上会将您的容器的端口与主机的IP一对一地绑定。那实际上是Docker feature

以下是启用该选项的Pod yaml示例,Pod将在主机上绑定端口80:

apiVersion: v1 kind: Pod metadata: name: myapp spec: hostNetwork: true containers: - name: myapp image: myapp:latest ports: - containerPort: 80

但是,如果您只想使用主机的IP访问群集中的应用,则无需使用该选项。您可以使用Service类型创建NodePort,这将提供对您服务的广告连播的访问权限。来自官方documentation

apiVersion: v1 kind: Service metadata: name: myapp labels: run: myapp spec: type: NodePort ports: - port: 80 protocol: TCP name: http selector: run: myapp

在这种情况下,您将能够连接到群集上的任何节点到端口80,该请求将被路由到您的应用。