将Pod公开为网络服务的抽象方法
1.当前Pod的访问方式
- 查看Pod的详细情况
- 在各个节点均可访问
- 问题:前端访问这个应用,需要知道3个pod的ip。显然不合适。
- 解决方式
2.创建Service
2.1命令行方式
创建Service
#暴露Deploy
kubectl expose deployment my-dep --port=8000 --target-port=80
#使用标签检索Pod
kubectl get pod -l app=my-dep
查看Service
#查看service
kubectl get svc
尝试访问
可以尝试访问,仅限于三台服务器,以及Pod内。和pod的访问范围一样。
curl 10.96.163.244:8000
- 负载均衡验证
- 分别在三个Pod中的index.html写入不同的值
- 在任意云主机控制台访问curl 10.96.163.244:8000
- 域名方式访问,只能在Pod内进行
curl my-dep.default.svc:8000
删除已经创建的service
kubectl delete svc xxx
2.2yaml文件方式
配置文件
#vi my-dep-service.yaml
apiVersion: v1
kind: Service
metadata:
labels:
app: my-dep
name: my-dep
spec:
selector:
app: my-dep
ports:
- port: 8000
protocol: TCP
targetPort: 80
kubectl apply -f xxx.yaml
3.ClusterIp模式
默认的创建就是ClusterIp模式。集群内可以访问
# 等同于没有--type的
kubectl expose deployment my-dep --port=8000 --target-port=80 --type=ClusterIP
apiVersion: v1
kind: Service
metadata:
labels:
app: my-dep
name: my-dep
spec:
ports:
- port: 8000
protocol: TCP
targetPort: 80
selector:
app: my-dep
type: ClusterIP
4.NodePort模式
可以通过外网访问
kubectl expose deployment my-dep --port=8000 --target-port=80 --type=NodePort