K8S容器HeadlessService间动态IP通信

我们知道pod的ip不是固定的,是根据所在宿主机的docker0网卡生成的,每次重启,更新,调度等情况IP都会变,那pod与pod之间需要互相调用,肯定不能用ip的,因为地址不是固定的, 如何能保障pod之前访问的可靠性,由此就衍生出Service的概念。

Headless Service通信

要定义一个服务(Service)为无头服务(Headless Service),需要把Service定义中的ClusterIP配置项设置为空: spec.clusterIP:None。和普通Service相比,Headless Service没有ClusterIP(所以没有负载均衡),它会给一个集群内部的每个成员提供一个唯一的DNS域名来作为每个成员的网络标识,集群内部成员之间使用域名通信。无头服务管理的域名是如下的格式:

$(service_name).$(k8s_namespace).svc.cluster.local

其中的 "cluster.local"是集群的域名,除非做了配置,否则集群域名默认就是cluster.local。StatefulSet下创建的每个Pod,得到一个对应的DNS子域名,格式如下:
( p o d n a m e ) . (podname). (podname).(governing_service_domain),这里 governing_service_domain是由StatefulSet中定义的serviceName来决定。
例如在本项目中存在服务elasticsearch,另一个程序要访问他,命名空间为iscas
那么替换项目配置文件中的IP地址为

elasticsearch.iscas.svc.cluster.local

此后,无论容器是否重启,IP地址是否改变,K8S会根据服务名称找到对应的该服务对应pod的实际IP地址进行关联。

参考博客
https://www.cnblogs.com/Jack47/p/deploy-stateful-application-on-Kubernetes.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值