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 会自动包含在服务的端点中。