k8s 中service暴露端口,外部可以访问的原理

k8s 中service暴露端口,外部可以访问的原理


2024年3月15日发(作者:)

k8s 中service暴露端口,外部可以访问的原理

Kubernetes (K8s) 是一种开源的容器编排和管理平台,广泛用于应用程

序的部署和管理。在K8s中,Service是一种用于暴露应用程序由Pod组

成的逻辑集合的对象。通过Service,可以实现将应用程序暴露给集群内

部和外部访问的需求。那么,在K8s中,Service是如何暴露端口并允许

外部访问的呢?本文将详细介绍K8s中Service暴露端口的原理。

1. Service是什么

在K8s中,Service是一种抽象,用于将一组由Pod组成的逻辑集合公开

为一个单一的DNS名称。这样,其他应用程序或用户可以通过这个DNS

名称来访问Service所代表的所有Pod。Service充当了一组Pod的负载

均衡器,它将请求分发给后端的Pod。这种抽象隐藏了底层Pod的细节,

使得应用程序无需考虑具体的Pod IP地址和端口,从而实现了在K8s集

群内动态地访问后端应用程序。

2. Service类型

在K8s中,有三种类型的Service,分别为ClusterIP、NodePort和

LoadBalancer。

- ClusterIP:默认类型,该类型的Service只会在集群内部进行通信,即

只能被集群内的其他应用程序访问,无法从集群外部访问。

- NodePort:该类型的Service会在每个节点上监听一个端口,并通过该

端口将外部流量转发到Service所代表的Pod。这样,可以通过集群节点

的IP地址和相应的端口来访问Service。

- LoadBalancer:该类型的Service会根据云厂商提供的负载均衡器来将

请求分发给Service所代表的Pod。这样,不仅可以通过集群节点的IP

地址和端口访问Service,还可以通过云负载均衡器提供的外部IP地址来

访问Service。

3. Service暴露端口的原理

# ClusterIP类型的Service

对于ClusterIP类型的Service,它默认只能在集群内部访问,无法从集群

外部访问。这是因为它的访问限制仅限于集群内部的虚拟网络。

# NodePort类型的Service

NodePort类型的Service会在每个节点上监听一个端口,并通过该端口

将外部流量转发到Service所代表的Pod。具体的工作原理如下:

1. 创建一个NodePort类型的Service,并指定Service所代表的Pod。

2. K8s会在每个节点上随机选择一个未使用的端口,并将该端口映射到

Service的目标端口。

3. K8s会在每个节点上的iptables规则中添加一条规则,将来自外部的流

量转发到该节点的Service。

4. 当有请求到达节点的该端口时,iptables规则将会将请求转发给

Service所代表的Pod。

通过上述步骤,NodePort类型的Service将外部流量转发到了Service

所代表的Pod,外部就可以通过集群节点的IP地址和相应的端口来访问

Service。

# LoadBalancer类型的Service

LoadBalancer类型的Service会根据云厂商提供的负载均衡器来将请求

分发给Service所代表的Pod。具体的工作原理如下:

1. 创建一个LoadBalancer类型的Service,并指定Service所代表的Pod。

2. K8s会向云厂商的负载均衡器服务注册一个新的负载均衡器实例,并将

该实例的地址与该Service绑定。

3. 当有请求到达负载均衡器的外部IP地址时,负载均衡器会将请求转发

给Service所代表的Pod。

通过上述步骤,LoadBalancer类型的Service通过云负载均衡器提供了

一个固定的外部IP地址,外部可以通过该IP地址来访问Service。

# 没有公共云平台的情况

对于没有公共云平台的情况,可以使用Ingress对象来实现将Service暴

露给外部的需求。Ingress是一种用于公开HTTP和HTTPS路由到集群内

部服务的规范。通过定义Ingress资源,并将其与Service关联,可以实

现集群外部的流量通过Ingress Controller(例如Nginx Ingress

Controller)进行负载均衡,并将请求转发给Service所代表的Pod。

4. 总结

在Kubernetes中,Service是一种用于暴露应用程序由Pod组成的逻辑

集合的对象。通过Service,可以实现将应用程序暴露给集群内部和外部

访问的需求。通过不同类型的Service(ClusterIP、NodePort和

LoadBalancer),可以实现集群内部和外部的访问。对于ClusterIP类型

的Service,默认只能在集群内部访问;对于NodePort类型的Service,

可以通过集群节点的IP地址和相应的端口来访问;对于LoadBalancer

类型的Service,可以通过云负载均衡器提供的外部IP地址来访问。对于

没有公共云平台的情况,可以使用Ingress对象来实现将Service暴露给

外部的需求。不同类型的Service提供了不同的功能和特性,可以根据具

体的需求选择合适的Service类型。


发布者:admin,转转请注明出处:http://www.yc00.com/web/1710459243a1760394.html

相关推荐

发表回复

评论列表(0条)

  • 暂无评论

联系我们

400-800-8888

在线咨询: QQ交谈

邮件:admin@example.com

工作时间:周一至周五,9:30-18:30,节假日休息

关注微信