Kubernetes 服务是一个抽象概念,它定义了一组逻辑 Pod 和访问它们的策略。服务提供稳定的 IP 地址和 DNS 名称来连接 Pod,确保即使 Pod 被重新创建或重新调度,服务的 IP 也保持不变。
下面的示例展示了如何创建一个公开 Nginx Pod 部署的 Kubernetes 服务。该服务将为访问 Nginx Pod 提供一个稳定的端点,即使单个 Pod 被终止或创建了新的 Pod。
[代码清单]
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx-deployment
spec:
replicas: 3
selector:
matchLabels:
app: nginx
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx
ports:
- containerPort: 80
---
apiVersion: v1
kind: Service
metadata:
name: nginx-service
spec:
selector:
app: nginx
ports:
- protocol: TCP
port: 80
targetPort: 80
type: ClusterIP
[执行结果]
创建了 “`nginx-deployment`”部署。创建了 “`nginx-service`”服务。你可以使用以下命令访问Nginx服务,获取服务的集群IP:`kubectl get svc nginx-service`
该命令将返回服务的 IP 地址,你可以用它在集群内访问 `Nginx Pod`。
Kubernetes 服务将 Pod 的生命周期与其网络端点分离。创建服务时,它会分配一个稳定的 IP 地址和 DNS 名称,用于访问与服务相关联的 Pod。这确保了即使服务背后的 Pod 发生变化,服务的 IP 地址和 DNS 名称也保持不变,为访问应用程序提供了可靠的方法。Kubernetes 中有不同类型的服务,如 ClusterIP(默认)、NodePort 和 LoadBalancer。每种类型都有不同的用途,具体取决于应用程序的特定网络需求。在本例中,我们使用的是 ClusterIP,它只能从群集内部访问。
[小知识]
Kubernetes 使用标签选择器将 Pod 与服务关联起来。服务根据 Pod 的标签选择 Pod,这意味着它可以自动将流量导向符合指定标签的所有 Pod。这种动态关联允许轻松扩展和更新应用程序,因为符合标签的新 Pod 会自动包含在服务的端点中。