rootsongjc / kubernetes-handbook

Kubernetes中文指南/云原生应用架构实战手册
https://jimmysong.io/book/kubernetes-handbook
Creative Commons Attribution 4.0 International
11.11k stars 2.95k forks source link

关于kubernetes的service的访问的问题 #301

Closed ghost closed 5 years ago

ghost commented 5 years ago

三台主机,主机名master是kubernetes master,另外两台是node节点。三台主机同时配置了flannel,可以相互ping通,但是在master不能访问kubernetes service的服务,在node上可以。

[root@master ~]# kubectl get svc
NAME         TYPE        CLUSTER-IP   EXTERNAL-IP   PORT(S)   AGE
kubernetes   ClusterIP   10.1.0.1     <none>        443/TCP   22h

问题二: 配置coredns

[root@master ~]# kubectl get svc -n kube-system
NAME       TYPE        CLUSTER-IP   EXTERNAL-IP   PORT(S)         AGE
kube-dns   ClusterIP   10.1.0.2     <none>        53/UDP,53/TCP   4h26m

[root@node2 ~]# telnet 10.1.0.2 53
Trying 10.1.0.2...
Connected to 10.1.0.2.
Escape character is '^]'.
Connection closed by foreign host.
[root@node2 ~]# 

[root@node1 ~]# telnet 10.1.0.2 53
Trying 10.1.0.2...

为了避免问题,第二次把kubelet和kube-proxy服务停掉,iptables -F, iptables -F -t nat清空两台node上的防火墙规则,重新启动kubelet和kube-proxy,还是出现上述情况

rootsongjc commented 5 years ago

你看下master节点上的网卡和路由信息。还有flannel的日志有没有错误。

ghost commented 5 years ago
[root@master ~]# ip route
default via 172.18.1.1 dev enp0s3 proto static metric 100 
10.8.0.0/16 dev flannel.1 
172.18.1.0/24 dev enp0s3 proto kernel scope link src 172.18.1.91 metric 100 

10.8.0.0/16 dev flannel.1 可以路由,flanneld没有看到有错误

在两个node节点上都可以访问kubernetes service

再问下,是不是不能在flannel.1不能用tcpdump抓包

ghost commented 5 years ago
[root@master ~]# ip add show dev flannel.1
3: flannel.1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1450 qdisc noqueue state UNKNOWN group default 
    link/ether 1a:c2:4a:b3:31:32 brd ff:ff:ff:ff:ff:ff
    inet 10.8.46.0/32 scope global flannel.1
       valid_lft forever preferred_lft forever
    inet6 fe80::18c2:4aff:feb3:3132/64 scope link 
       valid_lft forever preferred_lft forever
rootsongjc commented 5 years ago

你的 flannel 插件的网络模式选择的是 vxlan 还是 host-gw ?

ghost commented 5 years ago
[root@master etcd-pki]# etcdctl --cert-file etcd-client.pem --key-file etcd-client-key.pem --ca-file ca.pem --endpoints="https://172.18.1.91:2379,https://172.18.1.92:2379" get /coreos.com/network/config
{ "Network": "10.8.0.0/16", "Backend": {"Type": "vxlan"}}

我用的是vxlan模式, 另外网络这块不是太懂,老师,有没有关于xvlan的书介绍下

rootsongjc commented 5 years ago

你可以参考这本书:从 Docker 到 Kubernetes 中的容器网络图书资料分享

ghost commented 5 years ago

dns不同的问题找到了,是防火墙规则,filter的forward的默认规则改为ACCEPT

ghost commented 5 years ago

这个forward是docker0和flannel.1之间的

rootsongjc commented 5 years ago

OK 这个 Issue 可以关闭了吧?