Service
概念
在 Kubernetes 中,Service 是一种抽象,用于定义一个逻辑服务,该服务由一组运行在集群中的 Pod 提供支持。Service 为这些 Pod 定义了稳定的虚拟 IP 地址和 DNS 名称,并提供负载均衡、服务发现和会话亲和等功能。
具体来讲,当创建了一个 Service 后,Kubernetes 会自动为其分配一个唯一的 ClusterIP(仅在集群内部可访问的虚拟 IP 地址),并将其关联到一组 Pod 上。当客户端以 Service 的 ClusterIP 为目标进行连接时,Kubernetes 会自动将请求转发到这组 Pod 中的任意一个实例上,从而实现负载均衡的效果。
Service四种访问方式
- ClusterIP:这是 Service 的默认访问方式,将为 Service 创建一个仅集群内部可访问的虚拟 IP 地址,用于在 Kubernetes 集群内部访问 Service。使用该方式,请求将通过 kube-proxy 转发到后端 Pod。
- NodePort:该方式会将 Service 暴露在每个节点的高阶端口上,并将流量从该端口转发到 Service 中的后端 Pod。这样,客户端可以通过任意节点的 IP 地址和暴露的端口号访问 Service。需要注意的是,NodePort 3. 通常只适用于测试和开发环境,正式环境应该使用其他访问方式。
- LoadBalancer:该方式通过云厂商提供的负载均衡器将外部流量路由到 Service 中的后端 Pod。使用该方式,能够自动分配公网 IP 和域名,并且支持负载均衡、故障检测等功能,更适合于生产环境中的应用。
- ExternalName:该方式将 Service 映射到一个外部域名地址,这样客户端就可以通过 Service 名称访问外部服务。需要注意的是,使用 ExternalName 访问的服务必须通过 DNS 解析得到真实的 IP 地址,否则会出现错误。
定义一个Service
定义service的yaml文件
kind: Service
apiVersion: v1
metadata:
name: my-service
spec:
selector:
app: nginx
ports:
- protocol: TCP
port: 80 #service自己的端口
targetPort: 80 #容器的端口
创建服务
apiVersion: apps/v1
kind: Deployment
metadata:
annotations:
labels:
app: nginx
managedFields:
name: nginx
namespace: default
spec:
progressDeadlineSeconds: 600
replicas: 3
revisionHistoryLimit: 10
selector:
matchLabels:
app: nginx
strategy:
rollingUpdate:
maxSurge: 25%
maxUnavailable: 25%
type: RollingUpdate
template:
metadata:
creationTimestamp: null
labels:
app: nginx
spec:
containers:
- image: registry.cn-beijing.aliyuncs.com/dotbalo/nginx:1.15.12-alpine
imagePullPolicy: IfNotPresent
name: nginx
ports:
- containerPort: 80
resources:
limits:
cpu: 200m
memory: 512Mi
terminationMessagePath: /dev/termination-log
terminationMessagePolicy: File
dnsPolicy: ClusterFirst
restartPolicy: Always
schedulerName: default-scheduler
securityContext: {}
terminationGracePeriodSeconds: 30
说明:
该示例为 my-service:80 即可访问到具有 app=nginx 标签的 Pod 的 80 端口上。
需要注意的是,Service 能够将一个接收端口映射到任意的 targetPort,如果 targetPort 为空,
targetPort 将被设置为与 Port 字段相同的值。targetPort 可以设置为一个字符串,引用 backend
Pod 的一个端口的名称,这样的话即使更改了 Pod 的端口,也不会对 Service 的访问造成影响。
Kubernetes Service 能够支持 TCP、UDP、SCTP 等协议,默认为 TCP 协议。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律