背景简介
Kubernetes中的Service是一种抽象,定义了访问Pod的逻辑方式,实现Pod间通信和负载均衡。通过标签选择器识别Pod组,Service分配一个稳定的IP和端口,使Pod对外提供服务,确保应用的高可用性。
环境信息
- Kubernetes 已安装 【Kubernetes - 安装】
详细步骤
第一步: 查看需配置 Service 的 Pod 信息
- 罗列 Pod
$ kubectl get pod -n chat-robot
NAME READY STATUS RESTARTS AGE
chat-robot-redis-0 1/1 Running 0 15h
- 查看 Pod 详情
$ kubectl describe pod chat-robot-redis-0 -n chat-robot
Name: chat-robot-redis-0
Namespace: chat-robot
Priority: 0
Service Account: default
Node: k8s-main-worker-1/192.168.122.112
Start Time: Wed, 05 Mar 2025 18:32:34 +0800
Labels: app=chat-robot-redis
apps.kubernetes.io/pod-index=0
controller-revision-hash=chat-robot-redis-6f6998f87c
statefulset.kubernetes.io/pod-name=chat-robot-redis-0
******
第二步: 配置 Service,由于测试需要因此选择 NodePort 类型。
- Service 类型
- ClusterIP: 这是默认的Service类型。它仅在集群内部提供一个IP地址,使得Pod可以在集群内部通信。ClusterIP服务对于集群外部是不可见的,因此它不适用于外部访问。
- NodePort: NodePort服务在集群的每个节点上开放一个端口,并将该端口上的流量路由到相应的Service。
通过: 可以从集群外部访问服务。NodePort通常用于开发或测试环境,但在生产环境中可能会因为端口数量限制而不够灵活。 - LoadBalancer: LoadBalancer服务在云环境中自动创建一个外部负载均衡器(如果支持的话),并将流量路由到Service。它通常用于生产环境,提供从外部网络到集群内部服务的稳定访问。用户可以通过负载均衡器的IP地址访问服务,而无需知道集群内部的具体节点。
apiVersion: v1
kind: Service
metadata:
name: chat-robot-redis-svc
namespace: chat-robot
labels:
app: chat-robot-redis
spec:
type: NodePort
ports:
- port: 6379 # Redis默认端口
nodePort: 31925 # 可选,如果不指定,Kubernetes会随机选择一个可用端口
selector:
app: chat-robot-redis
解析:
- apiVersion 和 kind 指定了API版本和资源类型。
- metadata 包含了Service的名称、命名空间和标签。
- spec.type 设置为 NodePort,表示Service将通过集群中每个节点的IP和指定端口暴露。
- spec.ports 定义了内部Pod端口和对外暴露的NodePort。
- spec.selector 用于选择具有特定标签的Pod,这里选择了名为chat-robot-redis的Pod。
创建 Service
$ kubectl get pod,svc -n chat-robot
NAME READY STATUS RESTARTS AGE
pod/chat-robot-redis-0 1/1 Running 0 16h
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
service/chat-robot-redis-svc NodePort 10.100.187.49 <none> 6379:31925/TCP 12s
以上便是本文的全部内容,感谢您的阅读,如遇到任何问题,欢迎在评论区留言讨论。