Kubernetes Service

Kubernetes Service作为Pod服务发现的解决方案,提供稳定入口,包括ClusterIP、NodePort、LoadBalancer等多种类型。本文介绍了Service的基本概念、Endpoint、不同类型及操作方法,并分享了使用技巧,强调避免直接使用Pod IP以防止服务不稳定。
摘要由CSDN通过智能技术生成
什么是Service

Service是为一组Pod提供入口调度服务,并可以在Pod之间实现负载均衡。由于Pod是有生命周期的,每当Pod进行销毁而启动时IP地址也会随之改变,这将无法被调用者发现到,而Service出新就是为了解决服务发现这个问题,提供一个稳定的入口已便于服务调用者,而不用去关心Pod的IP地址变化。

什么是EndPoint

Service会根据资源定义清单中的选择器选择与之绑定的Pod成员,EndPoint就是存储这些Pod成员的IP及端口信息。

Service类型
ClusterIP

将Service提供一个稳定的IP地址供Kubernetes内部的资源对象访问
kubectl apply -f service-clusterip.yaml

apiVersion: v1
kind: Service
metadata:
  name: nginx-service
spec:
  selector:
    app: nginx
  type: ClusterIP
  ports:
  - protocol: TCP
    port: 80
    targetPort: 80

查看service详细信息
kubectl get service nginx-service -oyaml
在这里插入图片描述
kubectl describe service nginx-service
在这里插入图片描述

NodePort

将Service的Port暴露到Node上,并可以指定Node上的暴露Port (端口范围30000-32767)
kubectl apply -f service-nodeport.yaml

apiVersion: v1
kind: Service
metadata:
  name: nginx-service
spec:
  selector:
    app: nginx
  type: NodePort
  ports:
  - protocol: TCP
    port: 80
    targetPort: 80
    nodePort: 30000

查看service详细信息
kubectl get service nginx-service -o yaml
在这里插入图片描述
kubectl describe service nginx-service
在这里插入图片描述

LoadBalancer

将Service暴露在云产商提供的负载均衡服务
kubectl apply -f service-loadbalance.yaml

apiVersion: v1
kind: Service
metadata:
  name: nginx-service
spec:
  selector:
    app: nginx
  type: LoadBalancer
  ports:
  - port: 80
    targetPort: 80

kubectl get service nginx-service -o yaml
在这里插入图片描述
kubectl describe service nginx-service
在这里插入图片描述

ExternalName

将Service映射成外部的DNS名称,请求该Service时将会重定向到外部别名。
kubectl apply -f service-externalname.yaml

apiVersion: v1
kind: Service
metadata:
  name: nginx-service
spec:
  type: ExternalName
  externalName: example.com

kubectl get service nginx-service -o yaml
在这里插入图片描述
kubectl describe service nginx-service
在这里插入图片描述

Headless

将Service不分配ClusterIP,直接将EndPoint列表返回,让客户端自行决定访问哪一个Pod
kubectl apply -f service-headless.yaml

apiVersion: v1
kind: Service
metadata:
  name: nginx-service
spec:
  selector:
    app: nginx
  clusterIP: None
  ports:
  - protocol: TCP
    port: 80
    targetPort: 80

kubectl get service nginx-service -oyaml
在这里插入图片描述
kubectl describe service nginx-service
在这里插入图片描述

Service基本操作

查看Service列表
kubectl get service -o yaml | kubectl get service -o wide
在这里插入图片描述
通过kubectl create创建Service
kubectl create service clusterip nginx--tcp=80:80
在这里插入图片描述
通过kubectl expose创建Service
kubectl expose deployment nginx-deployment --type=ClusterIP --name=nginx-service --port=80 --target-port=80
在这里插入图片描述
通过kubectl delete删除Service
kubectl delete service [serviceName]
在这里插入图片描述
kubectl delete -f service-clusterip.yaml
在这里插入图片描述

使用技巧
  1. Kubernetes Service中不建议使用NodePort去指定某一个IP,这样容易造成端口绑定冲突,最好是由系统自动去分配端口。
  2. Kubernetes 服务调用请通过Service去指定,直接通过Pod IP的方式将容易造成问题,因为Pod在重启后会丢失原有的状态。
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值