(九)Kubernetes系列之Service

使用Deployment创建的Pod会动态创建和销毁。每个Pod的IP地址是动态生成的。当pod异常停止,deployment控制器自动产生新Pod时会重新生成新的IP地址。这样其他服务就无法正确找到pod了,k8s通过定义service一般使用标签选择器选择pod,对pod进行在逻辑上分组,对整个分组定义访问策略,这一组pod可以被service访问。调用者只需要使用service发布的服务,不需要关注pod的地址是否发生变。

0.创建测试deployment为后续创建service提供pod

0.1创建deployment模板

vi nginxdeployment-sercice.yml

内容如下:

4cb3b40b413e33b36b0a289b3688a589.png

0.2.创建Deployment

kubectl apply -f nginxdeployment-sercice.yml

c0f0083a5082a98a1cf3167be4775870.png

0.3查看pod

kubectl get pods -o wide

bca3f8ef4c8a44a67219246563a71676.png

1.Service对外提供服务

1.1.ClusterIP

默认的服务,为service分配一个集群内部可以访问的固定虚拟IP(ClusterIP),仅可集群内的机器和集群中的pod可以使用。

1.1.1创建模板

vi nginxsercice1.yml

内容如下;

045f03c29e0c1b3b1b91be6c81f47f3a.png

1.1.2创建service

kubectl create -f nginxsercice1.yml

d2caceb69d4bbe283b2c52dc6195f674.png

1.1.3查看service

kubectl get svc

2318678b53620a0707219d638cf9c15d.png

kubectl describe svc nginxservice1

6a0876628ae99b6f248016ed83b89d1c.png

1.1.4使用ClusterIP+端口访问

6f13ad09c6d513909119d92430ceabf9.png

1.2.NodePort

基于ClusterIP生成的ClusterIP,把这个IP地址及端口映射到master和各个node上,集群外的机器可以使用master或node的ip+端口访问服务

1.2.1创建模板

vi nginxsercice-nodeport.yml

内容如下:

1d0e989f8f75eda76f244d0ceb5ff3fd.png

注意:nodeport的取值范围为30000~32767

1.2.2创建service

kubectl create -f nginxsercice-nodeport.yml

d6fba384b1c574ddfc63a22fa3331ba0.png

1.2.3  使用集群外集群访问

282bb5a0e9ea27804b2da67e3f2668f4.png

1.3.LoadBalancer

使用外部均衡器访问,基于ClusterIP方式和NodePort方式,使用外部负载均衡器,由负载均衡器映射到各个node的端口上

1.31.创建模板文件

vi nginxsercice-loadbalancer.yml

内容如下:

aaec6e38780d4d1023e547ad0b96b981.png

status:

loadBalancer:

igress:

- ip :云服务商提供的LoadBalancer的IP

注意:

1.如果集群没有在公有云的IaaS平台运行则会一直处于Pending状态

2.如果在私有集群中,可以尝试使用MetalLB解决上述问题

1.4.headless service

只可在集群的内部Pod中访问,使用DNS提供稳定的网络ID来进行访问,不分配ClusterIP也不使用kube-proxy进行反向代理和负载均衡

1.4.1.创建模板文件

vi nginxsercice-headlessservice.yml

内容如下:

abaa36b3c1d2cd38b8dca7f4fed914ce.png

1.4.2创建service

kubectl apply -f nginxsercice-headlessservice.yml

345432f5143e6c002b94077fa004c795.png

1.4.3查看service

kubectl get service

9c006fc073f10b5e9288ba9074a3d0a7.png

注意:集群内外的机器不能直接访问headlessservice服务,只能由Pod访问,而且需要通过DNS方式。访问形式为[ServiceName].[Namespace].svc.[ClusterDomain]

2.将外部服务定义为Service

2.1 ExternalName

把外部的服务通过指定的规则映射到k8s集群中为集群内部提供服务

2.1.1.创建模板文件

vi nginxsercice-externalname.yml

内容如下:

5429c75e945823e1a538553027ed02da.png

2.1.2创建service

18ad92abd2362ce9b1aa0836845372c9.png

2.1.3查看service

kubectl get service

81843f712591a4e27797bfdcc7b39c44.png

进入pod容器内部

kubectl exec -ti nginxdeployment-service-746777b75f-tgbr6 -- /bin/sh

查询DNS信息

nslookup nginxsercice-externalname.svc.cluster.local

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

调试大师

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值