例如,在使用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。
答案 0 :(得分:1)
添加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,该请求将被路由到您的应用。