curl https://saas-pay-gray.XXX.cn/ping 外网
curl https://vpc-saas-pay-gray.XXX.cn/ping slb,即阿里云内网 1/3包是通的 当时设计slb(vpc)的时候考虑到具体功能,除了日常使用使用内网拉取容器镜像的功能之外,是否还有其他?
由于公司架构使用了k8s集群,k8s内部有做了一套完整的解析;即
不经过slb,直接通过k8s集群内DNS解析调用服务
servicename
curl saas-pay-gray/ping 相同的命名空间
kuaizimu-h5-gray -> saas-pay
servicename.namespace
curl saas-pay-gray.saas/ping 不同的命名空间之间的服务调用
curl http://saas-pay-gray.saas/ping 实验证明:在容器内直接获取k8s集群内的另外一个容器服务是可以的
curl https://saas-pay-gray.saas/ping 这里不可以访问的原因是内部解析不通过证书解析
https 对应 一个域名
杨贵明那里调用服务是通过域名" http://saas-pay-prod.saas.svc.cluster.local "调用服务的,其原理和调用servicename一样。
servicename的cluster.local在 /etc/systemd/system/kubelet.service.d/10-kubeadm.conf 文件中定义。
可以通过命令查看:
cat /etc/systemd/system/kubelet.service.d/10-kubeadm.conf |grep cluster-domain |awk ‘{print $NF}‘
线下是否可以一样的方法调用servicename呢?答案是可以的
saas-pay-test.saas.svc.cluster.local
刚刚和阿里这儿确认了一下:
以后k8s集群内容器之间的服务调用,域名统一使用 "项目名.命名空间.svc.cluster.local" ;这个仅在k8s集群内解析。
外网之间调用k8s服务,直接使用公网的域名即可
注:
k8s集群内的容器之间的服务调用 不能走ECS的vpc网络,这种情况集群会把slb的ip当着是service的ip就进行转发
即vpc-公网域名;
原文地址:https://blog.51cto.com/12131824/2396754