前言
- 本篇来学习Service基础知识
Service
- Service可以看作是一组同类Pod对外的访问接口。借助Service,应用可以方便地实现服务发现和负载均衡。
- 虽然每个Pod都会分配一个单独的Pod IP,然而却存在如下两问题:
- Pod IP 会随着Pod的重建产生变化
- Pod IP 仅仅是集群内可见的虚拟IP,外部无法访问
命令方式
创建集群内部可访问的Service
# 暴露service # --name 指定 service 名称 # --type=ClusterIP 指定类型,此处为固定写法 # --target-port 对外暴露的端口 [root@master ~]# kubectl expose deploy nginx --name=svc-nginx1 --type=ClusterIP --port=80 --target-port=80 -n test service/svc-nginx1 exposed # 查看service # 这里产生了一个CLUSTER-IP,这就是service的IP,在Service的生命周期中,这个地址是不会变动的 [root@master ~]# kubectl get service -n test NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE svc-nginx1 ClusterIP 10.105.29.61 <none> 80/TCP 26s # 查看service 可简写为 svc [root@master ~]# kubectl get svc -n test NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE svc-nginx1 ClusterIP 10.105.29.61 <none> 80/TCP 92s # 内部访问 curl 10.105.29.61:80
创建集群外部可访问的Service
# 暴露 service 设置type为NodePort 外部可访问 [root@master ~]# kubectl expose deploy nginx --name=svc-nginx2 --type=NodePort --port=80 --target-port=80 -n test service/svc-nginx2 exposed # 查看service [root@master ~]# kubectl get svc svc-nginx2 -n test -o wide NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE SELECTOR svc-nginx2 NodePort 10.104.68.24 <none> 80:31912/TCP 104s run=nginx # 通过浏览器访问 ip 为master节点ip http://192.168.96.100:31912
配置方式
- 创建一个svc-nginx.yaml,内容如下:
apiVersion: v1 kind: Service metadata: name: svc-nginx namespace: test spec: clusterIP: ports: - port: 80 protocol: TCP targetPort: 80 selector: run: nginx type: ClusterIP
- 创建:kubectl create -f svc-nginx.yaml
# 新建 [root@master ~]# kubectl create -f svc-nginx.yaml service/svc-nginx created [root@master ~]# kubectl get svc -n test NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE svc-nginx ClusterIP 10.104.14.121 <none> 80/TCP 13s
- 删除:kubectl delete -f svc-nginx.yaml
[root@master ~]# kubectl delete -f svc-nginx.yaml service "svc-nginx" deleted