13 服务与负载均衡之服务类型

在Kubernetes中,服务(Service)是一个非常重要的概念,它为一组Pod提供稳定的网络访问地址,并提供负载均衡的能力。从上一篇浩如烟海的内容《Pod管理之ReplicaSet与Deployment》中,我们了解到如何创建和管理Pod,而在这一部分,我们将深入探讨Kubernetes的服务类型以及如何利用它们为我们的应用提供可靠的网络通讯。

1. 什么是Kubernetes服务?

Kubernetes服务是一个抽象层,定义了一种访问Pod的方式。它使得我们可以通过一个固定的网络地址(即服务地址)和端口访问后端一组Pod,而不需要关心这些Pod的具体IP地址或是它们是否在持续变化。服务的这一特性使得Pod的扩缩容和重启变得更加透明。

2. 服务类型

Kubernetes提供了多种服务类型。我们将重点介绍以下四种:

2.1 ClusterIP

  • 默认服务类型,用于在集群内部为服务提供一个虚拟IP地址。此服务类型只在集群内部可访问,不对外暴露。
1
2
3
4
5
6
7
8
9
10
11
12
apiVersion: v1
kind: Service
metadata:
name: my-service
spec:
selector:
app: my-app
ports:
- protocol: TCP
port: 80
targetPort: 8080
type: ClusterIP

2.2 NodePort

此服务类型分配一个端口(30000-32767)到每个节点的IP上,允许外部访问。通过NodeIP:NodePort的方式可以访问后端服务。适合用于简单的外部访问场景。

1
2
3
4
5
6
7
8
9
10
11
12
13
apiVersion: v1
kind: Service
metadata:
name: my-nodeport-service
spec:
type: NodePort
selector:
app: my-app
ports:
- protocol: TCP
port: 80
targetPort: 8080
nodePort: 30001

2.3 LoadBalancer

在云环境中,例如AWS、GCP等,LoadBalancer服务会自动配置云服务的负载均衡器,外部访问通过负载均衡的IP进行。

1
2
3
4
5
6
7
8
9
10
11
12
apiVersion: v1
kind: Service
metadata:
name: my-loadbalancer-service
spec:
type: LoadBalancer
selector:
app: my-app
ports:
- protocol: TCP
port: 80
targetPort: 8080

2.4 ExternalName

这种服务类型通过返回一个CNAME记录来实现服务的外部访问。这对于需要将外部服务的地址引入Kubernetes集群非常有用。

1
2
3
4
5
6
7
apiVersion: v1
kind: Service
metadata:
name: my-external-service
spec:
type: ExternalName
externalName: example.com

3. 案例:创建和访问服务

假设我们有一个简单的应用程序,它在8080端口上提供HTTP服务。我们已经通过Deployment成功地创建了一个Pod,其中的应用程序名称为my-app。接下来,我们将为这个应用创建对应的服务。

3.1 创建Deployment

首先,我们来确认我们的Deployment已经创建:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
apiVersion: apps/v1
kind: Deployment
metadata:
name: my-app
spec:
replicas: 3
selector:
matchLabels:
app: my-app
template:
metadata:
labels:
app: my-app
spec:
containers:
- name: my-app-container
image: my-app-image:latest
ports:
- containerPort: 8080

3.2 创建ClusterIP服务

然后,我们为这个Deployment创建一个ClusterIP服务:

1
2
3
4
5
6
7
8
9
10
11
12
apiVersion: v1
kind: Service
metadata:
name: my-app-service
spec:
selector:
app: my-app
ports:
- protocol: TCP
port: 80
targetPort: 8080
type: ClusterIP

3.3 访问服务

在Kubernetes集群内部,我们可以使用my-app-service这个名字访问服务:

1
curl http://my-app-service:80

此命令将会把请求发送到集群内部的my-app Pod,而不必关心它们的实际IP地址。

4. 小结

在本篇中,我们探讨了Kubernetes服务类型,尤其是如何创建和使用这些服务来提供网络访问和负载均衡功能。我们进行了实际的案例演示,从创建Deployment到服务的设置,展示了如何在Kubernetes中实现服务发现和负载均衡。

下一节我们将深入探讨Kubernetes服务与负载均衡中的具体负载均衡实践,以帮助大家更深层次地理解Kubernetes在流量分发和管理上的能力。

13 服务与负载均衡之服务类型

https://zglg.work/kubernetes-zero/13/

作者

AI免费学习网(郭震)

发布于

2024-08-15

更新于

2024-08-16

许可协议

分享转发

交流

更多教程加公众号

更多教程加公众号

加入星球获取PDF

加入星球获取PDF

打卡评论