一、概念
通过之前的学习, 已经可以通过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
》》》博主长期更新学习心得,推荐点赞关注!!!
》》》若有错误之处,请在评论区留言,谢谢!!!
版权声明:本文不是「本站」原创文章,版权归原作者所有 | 原文地址: