目前 kubeedge 1.6 版本中的edgemesh 模块主要解决了同一网络内的edge nodes pod通过service 访问服务。其流程图如下:
分别有边缘节点node A, B, podA运行在nodeA上, podB运行在nodeB上。并为podB创建service
apiVersion: v1
kind: Service
metadata:
name: my-service
spec:
clusterIP: None
selector:
app: nginx
ports:
- name: http-0
protocol: TCP
port: 8080
targetPort: 80
现从podA 中curl my-service.default:8080 来访问podB提供的服务。
1. curl my-service.default:8080 会触发dns查寻请求,此时podA的DNS配置如下:
# cat /etc/resolv.conf
nameserver 172.17.0.1
172.17.0.1为主机上docker0的IP地址,因为edgemesh 的dns server监听在docker0:172.17.0.1:53上,所以edgemesh 会拦截并处理该DNS请求,并返回一个edgemesh分配的虚假IP:9.251.0.6
2. curl命令收到该my-service.default的IP后,向9.251.0.6:8080发起http请求,此时查看nodeA上的i