KubernetesNotes8:Service服务

KubernetesNotes8:Service服务

Created
Nov 21, 2021 12:31 PM
Last Edited
Last updated December 3, 2021
Tags

1. 简介

service: Pod的服务发现负载均衡。一组Pod配置成
notion image

2. ClusterIP模式

2.1 准备

  • 环境:3个Pod部署了Nignx
  • 3个Pod中分别写入内容
notion image
root@my-dep-5b7868d854-99m5h:/# cd /usr/share/nginx/html/ root@my-dep-5b7868d854-99m5h:/usr/share/nginx/html# ls 50x.html index.html root@my-dep-5b7868d854-99m5h:/usr/share/nginx/html# echo 2222 > index.html
notion image

2.2 查看信息

notion image

2.3 统一暴露成服务

# 1. 暴露端口 # 等价于kubectl expose deploy my-dep --port=8000 --target-port=80 --type=ClusterIP kubectl expose deploy my-dep --port=8000 --target-port=80 # 2. 访问service kubectl get service
notion image

2.4 访问端口

2.4.1 使用IP

# 访问暴露端口8000 root@docker01:/home# curl 10.96.250.75:8000
集群内任意位置使用service的ip:port都可以访问,可以发现随机打印3台中的内容,达到负载均衡。
notion image

2.4.2 使用域名的方式

  1. 创建一个tomcat
kubectl create deploy my-tomcat --image=tomcat
  1. 模拟前端访问后台,使用后台ip地址
root@my-tomcat-b4c9b6565-q2cmz:/usr/local/tomcat# curl 10.96.250.75:8000
notion image
  1. 使用域名
  • 由于创建服务的时候没有加名称空间,使用默认的名称空间default ,也可以负载均衡访问。
  • 域名只能在Pod内访问
# 使用服务名.名称空间.svc root@my-tomcat-b4c9b6565-q2cmz:/usr/local/tomcat# curl my-dep.default.svc:8000
notion image

2.5 以文件的形式创建Service

apiVersion: apps/v1 kind: Service metadata: name: my-dep labels: app: my-dep # namespace: default spec: selector: app: my-dep ports: - port: 8000 protocol: TCP targetPort: 80
 

2.6 下线测试

模拟一台宕机(集群进行缩放)
notion image
发现数据只会在存活的两台进行打印,同样可以负载均衡。
 

2.7 上线测试

扩容,也可以达到负载均衡。
 

3. NodePort模式

  • 删除my-dep服务
root@docker01:/home# kubectl delete svc my-dep service "my-dep" deleted

3.1 暴露端口

kubectl expose deploy my-dep --port=8000 --target-port=80 --type=NodePort
notion image

3.2 集群IP访问

root@docker01:/home# curl 10.96.53.48:8000

3.3 使用随机端口访问

NodePort范围在30000~32767之间
# 8000:30820/TCP # 外部可以访问http://192.168.92.138:30820/ # docker02:http://192.168.92.139:30820/ # docker03:http://192.168.92.140:30820/ # docker04:http://192.168.92.141:30820/
外部可以访问,使用浏览器访问主机IP:随机端口号。任意主机的IP都可以
notion image

4. 补充

4.1查看每个Pod的标签

root@docker01:/home# kubectl get pod --show-labels NAME READY STATUS RESTARTS AGE LABELS my-dep-5b7868d854-99m5h 1/1 Running 1 (18h ago) 18h app=my-dep,pod-template-hash=5b7868d854 my-dep-5b7868d854-gnrrv 1/1 Running 1 (18h ago) 18h app=my-dep,pod-template-hash=5b7868d854 my-dep-5b7868d854-xdrnw 1/1 Running 1 (18h ago) 18h app=my-dep,pod-template-hash=5b7868d854