(二十二)Kubernetes -- Service

一、概念

通过之前的学习, 已经可以通过deployment来创建一组pod来提供具有高可用性的服务。虽然每个pod都会分配一个ip,然而都存在以下问题:
1)pod ip会随着pod的重建而变化
2)pod ip仅仅是集群内可见的虚拟ip,外部都无法访问
这样对于访问这个服务带来了难度,因此,kubernetes设计里service来解决这个问题。
service可以看作是一组同类pod对外的访问接口,借助service,应用可以方便的实现服务发现和负载均衡。
在这里插入图片描述
一个请求过来先到达service,service根据标签选择器来匹配到pod,然后转发到pod。

二、service创建

service一旦创建之后会有一个ip,如果sevice的ip发生变化,则通过service访问pod的ip也会发生变化。

  1. 创建集群内部可访问的service
#暴露service
# expose 暴露,就是把上图所示的三个pod暴露出来
# deploy nginx 通过deployment 来寻找pod
# name 名称
# type 类型,ClusterIp这个类型是只有在集群内部才可以访问的
# port service 上的端口
# target-port 对应到pod上的端口
kubectl expose deploy nginx --name=svc-nginx1 --type=ClusterIp --port=80 --target-port=80 -n dev
#查询service, service可以简写为svc
kubectl get service -n dev

这里产生了一个CLUSTER-IP,这就是service的ip,在service的生命周期中,这个地址是不会变动的,可以通过这个ip访问当前service对应的pod:

curl 10.109.179.231:80
  1. 创建集群外部也可以访问的service
#上面创建的service的type类型为ClusterIp,这个ip地址只可以在集群内部访问,如果需要创建集群外部也可以访问的service,需要修改type的类型为NodePort
kubectl expose deploy nginx --name=svc-ningx2 --type=NodePort --port=80 --target-port=80 -n dev
#这时候的port格式80:30539,30539对应的是node节点上的端口,访问node节点的30740会转发到此service的80端口,可以在本机访问:

在这里插入图片描述

  1. 删除servie
kubectl delete svc svc-nginx1 -n dev
  1. 配置方式
    创建一个svc-nginx.yaml
apiVersion: v1
kind: Service
metadata:
	name: svc-nginx
	namespace: dev
spec:
	clusterIp: 10.109.179.231
	ports:
		- port: 80
		  protocol: TCP
		  targetPort: 80
	selector:
		run: nginx
	type: ClusterIp
		

如果配置的是ClusterIp,则clusterIp可以不用配置,配置的话是使用的配ip,不配置的话是默认分配ip

#创建service
kubectl create -f svc-nginx.yaml
#删除
kubectl delete -f svc-nginx.yaml

》》》博主长期更新学习心得,推荐点赞关注!!!
》》》若有错误之处,请在评论区留言,谢谢!!!

猜你喜欢

转载自blog.csdn.net/qq_41622739/article/details/114223100