4.2.5 共享节点的网络名称空间

同一个 Pod 对象的各容器均运行于一个独立的、隔离的 Network 名称空间中,共享同一个网络协议栈及相关的网络设备,如图 4-7a 所示。也有一些特殊的 Pod 对象需要运行于所在节点的名称空间中,执行系统级的管理任务,例如查看和操作节点的网站资源甚至是网络设备等,如图4-7b所示。

Pod 对象的网络名称空间
图 1.6.2.5 - Pod 对象的网络名称空间

通常,以Kubeadm 部署的 Kubernetes 集群中的 kube-apiserver、kube-controller-manager、kube-scheduler,以及 kube-proxy 和 kube-flannel 等通常都是第二种类型的Pod对象。事实上,仅需要设置 spec.hostNetwork 的属性为 true 即可创建共享节点网络名称空间的 Pod 对象,如下面的配置清单所示:

apiVersion: v1
kind: Pod
metadata: 
    name: pod-use-hostnetwork
spec:
    containers:
    - name: myapp
      image: ikubernetes/myapp:v1
    hostNetwork: true

将上面的配置清单保存与配置文件中,如 pod-use-hostnetwork.yaml,将其创建与集群上,并查看其网络接口的相关属性信息以验证它是否能共享使用工作节点的网络名称空间:

**[terminal]
**[delimiter $ ]**[command kubectl apply -f pod-use-hostnetwork.yaml]
pod/pod-use-hostnetwork created
**[delimiter $ ]**[command kubectl exec -it pod-use-hostnetwork -- sh]
/ # ifconfig 
cni0      Link encap:Ethernet  HWaddr 72:C6:CF:37:34:8C  
          inet addr:10.244.3.1  Bcast:0.0.0.0  Mask:255.255.255.0
          inet6 addr: fe80::70c6:cfff:fe37:348c/64 Scope:Link
          UP BROADCAST MULTICAST  MTU:1500  Metric:1
          RX packets:276 errors:0 dropped:0 overruns:0 frame:0
          TX packets:286 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000 
          RX bytes:19983 (19.5 KiB)  TX bytes:35428 (34.5 KiB)

docker0   Link encap:Ethernet  HWaddr 02:42:5C:E0:08:C5  
          inet addr:172.17.0.1  Bcast:172.17.255.255  Mask:255.255.0.0
          UP BROADCAST MULTICAST  MTU:1500  Metric:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0 
          RX bytes:0 (0.0 B)  TX bytes:0 (0.0 B)

ens192    Link encap:Ethernet  HWaddr 00:0C:29:AD:A8:D2  
          inet addr:192.168.0.183  Bcast:192.168.0.255  Mask:255.255.255.0
          inet6 addr: fe80::20c:29ff:fead:a8d2/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:3235233 errors:0 dropped:1 overruns:0 frame:0
          TX packets:2402001 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000 
          RX bytes:1594050628 (1.4 GiB)  TX bytes:237476297 (226.4 MiB)

flannel.1 Link encap:Ethernet  HWaddr 36:4D:70:4C:69:47  
          inet addr:10.244.3.0  Bcast:0.0.0.0  Mask:255.255.255.255
          inet6 addr: fe80::344d:70ff:fe4c:6947/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1450  Metric:1
          RX packets:237 errors:0 dropped:0 overruns:0 frame:0
          TX packets:232 errors:0 dropped:8 overruns:0 carrier:0
          collisions:0 txqueuelen:0 
          RX bytes:28098 (27.4 KiB)  TX bytes:17586 (17.1 KiB)

lo        Link encap:Local Loopback  
          inet addr:127.0.0.1  Mask:255.0.0.0
          inet6 addr: ::1/128 Scope:Host
          inet6 addr: ::1/128 Scope:Host
          UP LOOPBACK RUNNING  MTU:65536  Metric:1
          RX packets:1338 errors:0 dropped:0 overruns:0 frame:0
          TX packets:1338 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000 
          RX bytes:81611 (79.6 KiB)  TX bytes:81611 (79.6 KiB)

如上述命令的结果显示所示,它打印出的工作节点的网络设备及其相关的接口信息。这就意味着,Pod 对象中运行的容器化应用也将监听与其所在的工作节点的IP地址之上,这可以通过直接向 kube-node-2.localdomain 节点发起请求来验证:

**[terminal]
**[delimiter $ ]**[command curl kube-node-2.localdomain]
Hello MyApp | Version: v1 | <a href="hostname.html">Pod Name</a>

另外,在 Pod 对象中时还可以分别使用 spec.hostPID 和 spec.hostIPC 来共享工作节点的PID和IPC名称空间。

results matching ""

    No results matching ""