StatefulSet 所管理的 Pod 不再是随机的名字了,而是有了顺序编号,从 0 开始分别被命名
域名:Service 发现这些 Pod 不是一般的应用,而是有状态应用,需要有稳定的网络标识,所以就会为 Pod 再多创建出一个新的域名,格式是“Pod 名. 服务名. 名字空间.svc.cluster.local”。当然,这个域名也可以简写成“Pod 名. 服务名”。这样在 StatefulSet 里的这两个 Pod 都有了各自的域名,也就是稳定的网络标识
Service 自己会有一个域名,格式是“对象名. 名字空间”,每个 Pod 也会有一个域名,形式是“IP 地址. 名字空间”。但因为 IP 地址不稳定,所以 Pod 的域名并不实用,一般我们会使用稳定的 Service 域名。
域名必须通过Service对象才能实现
Headless Service:Service 原本的目的是负载均衡,应该由它在 Pod 前面来转发流量,但是对 StatefulSet 来说,这项功能反而是不必要的,因为 Pod 已经有了稳定的域名,外界访问服务就不应该再通过 Service 这一层了。所以,从安全和节约系统资源的角度考虑,我们可以在 Service 里添加一个字段clusterIP: None,告诉 Kubernetes 不必再为这个对象分配 IP 地址。
# ip link list ... 7: veth101@veth100: <BROADCAST,MULTICAST,M-DOWN> mtu 1500 qdisc noop state DOWN mode DEFAULT group default qlen 1000 link/ether 36:61:58:ca:2f:cc brd ff:ff:ff:ff:ff:ff 8: veth100@veth101: <BROADCAST,MULTICAST,M-DOWN> mtu 1500 qdisc noop state DOWN mode DEFAULT group default qlen 1000 link/ether ae:b4:78:33:73:be brd ff:ff:ff:ff:ff:ff
可以看到新创建的veth peer设备的默认mtu是1500,设备初始状态是DOWN
注意现在这两个veth设备都在主机的network ns中。
将veth101移动到一个mynet ns中
把veth101移进上一节创建的mynet namespace中
1
ip link set veth101 netns mynet
进入ns查看
绑定ip并将设备状态置为up
在上一节我们使用ip link set dev命令设置设备的状态
现在用另一个命令ifconfig。
因为现在两个网卡都没有ip,所以需要配置ip
1 2
ifconfig veth100 10.10.10.100/24 up ip netns exec mynet ifconfig veth101 10.10.10.101/24 up
查看一下
这样我们的一对veth,一个在主机的网络空间下,一个在mynet网络空间中,
互相ping一下
ok,可以互通
查看下ns里的路由
为什么能通呢?看一下mynet里的路由就明白了
1 2 3 4
# ip netns exec mynet route Kernel IP routing table Destination Gateway Genmask Flags Metric Ref Use Iface 10.10.10.0 0.0.0.0 255.255.255.0 U 0 0 0 veth101
[root@t-middle01 ~]# ip link add veth0 type veth peer name veth1 [root@t-middle01 ~]# ifconfig veth0 1.2.3.100/24 up [root@t-middle01 ~]# ifconfig veth1 1.2.3.200/24 up
# ip netns help Usage: ip netns list ip netns add NAME ip netns set NAME NETNSID ip [-all] netns delete [NAME] ip netns identify [PID] ip netns pids NAME ip [-all] netns exec [NAME] cmd ... ip netns monitor ip netns list-id
# ip netns exec mynet ip link list 1: lo: <LOOPBACK> mtu 65536 qdisc noop state DOWN mode DEFAULT qlen 1000 link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
目前没有任何配置,只有一个lo 回环设备。
状态还是DOWN的。因此现在ping 本地也是不通的。
1 2
# ip netns exec mynet ping 127.0.0.1 connect: Network is unreachable