K8s009 | 网络方案
阿里云 K8S 集群网络目前有两种方案:一种是 flannel 方案;另外一种是基于 calico 和弹性网卡 eni 的 terway 方案。Terway 和 flannel 类似,不同的地方在于 terway 支持 Pod 弹性网卡,以及 NetworkPolicy 功能。
Service
在 Kubernetes (k8s) 中,Service 对象定义了一种访问 Pod 组的方式,它提供了负载均衡和名称解析。Service 有几种不同的类型,每种类型都适用于特定的使用场景:
1、ClusterIP:
这是默认的 Service 类型,它为 Service 分配一个内部的 IP 地址,使得 Service 只能在集群内部访问。
适用于内部通信,例如,当你需要让集群内的其他组件访问某个应用时。
2、NodePort:
它为 Service 分配一个静态端口,并在集群的所有节点上公开该端口。
适用于需要从集群外部访问服务的情况,但不需要负载均衡器的情况。
3、LoadBalancer:
这个 Service 类型通常与云提供商的负载均衡服务集成,为 Service 分配一个外部可访问的负载均衡器。
适用于需要从互联网访问服务的情况,并且需要负载均衡和自动扩展的场景。
4、ExternalName:
它允许将 Service 定义为对外部服务的引用,例如,将 Service 指向一个外部的 DNS 名称。
适用于需要将集群内的服务路由到集群外部的服务或组件的情况。
选择哪种类型的 Service 取决于你的应用程序需求和部署环境。例如,如果你的服务需要从外部网络访问,那么 NodePort 或 LoadBalancer 可能是更好的选择。如果你的服务只在集群内部使用,那么 ClusterIP 就足够了。如果你需要将服务指向集群外部的某个服务,那么 ExternalName 是合适的选择。
|
|
Headless Service
上面我们讲解了service的使用方法和实现逻辑,主要就是代理一组pod容器提供负载均衡以及反向代理服务。但是有时候我们不需要这种负载均衡,比如下面的两个场景:
- K8S部署某个kafka集群,此时就不需要service来负载均衡,客户端需要的是一组pod所有ip的列表。
- 客户端自己处理负载均衡的逻辑,比如K8S部署两个mysql,客户端自己处理负载请求,或者根本不处理这种负载,就要两套mysql然后手动控制读写请求。
基于上面的两个场景,K8S提供了headless serivce功能,字面意思是无头service,其实就是该service不显式的对外提供IP。
创建该类型Service的yaml例子如下:
|
|
最后说一嘴,headless service一般结合StatefulSet来部署有状态的应用,比如大数据组件或者nosql数据库等,这种分布式的系统需要headless service来获取所有节点ip的列表供业务场景使用。
参考阅读:
https://spring4all.com/forum-post/5891.html
https://blog.51cto.com/u_16213568/11364577
https://zhuanlan.zhihu.com/p/85718161
https://blog.csdn.net/weixin_64124795/article/details/130952239
(完)
- 原文作者: 闪电侠
- 原文链接:https://chende.ren/2024/09/16184409-009-k8s-net.html
- 版权声明:本作品采用 开放的「署名 4.0 国际 (CC BY 4.0)」创作共享协议 进行许可