虽然每个Pod都会分配一个单独的Pod IP,然而却存在如下两问题:
Pod IP 会随着Pod的重建产生变化Pod IP 仅仅是集群内可见的虚拟IP,外部无法访问service就是一组同类型的pod对外访问的接口,借助service,应用可以方便的实现服务发现和负载均衡
上实战
[qq@k8snode1 ~]$ kubectl apply -f deploy.yamldeployment.apps/nginx created《先把上节课搭建集群的yaml直接用起来搭建实验环境》[qq@k8snode1 ~]$ kubectl get pods -n dev -o wide《通过-o wide可以查到pod的ip》NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATESnginx-64b7c758f4-46xld 1/1 Running 0 40s 172.17.0.5 minikube <none> <none>nginx-64b7c758f4-k2gk5 1/1 Running 0 40s 172.17.0.3 minikube <none> <none>nginx-64b7c758f4-wwhn4 1/1 Running 0 40s 172.17.0.4 minikube <none> <none>[qq@k8snode1 ~]$ curl 172.17.0.5:80[qq@k8snode1 ~]$ kubectl expose deploy nginx --name=svc-nginx1 --type=ClusterIP --port=80 --target-port=80 -n dev《创建service,通过deploy指定的label标签,service会通过deploy指定的标签来找指定的pod,要不deploy时不时干掉一个pod,service不找不到了么》service/svc-nginx1 exposed[qq@k8snode1 ~]$ kubectl get svc -n dev《svc就是service的缩写》NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGEsvc-nginx1 ClusterIP 10.100.17.98 <none> 80/TCP 32s 《ClusterIP就是内部访问,大小写要注意不能错, ClusterIP是默认类型》这样就可以通过service的IP来访问nginx的集群了[qq@k8snode1 ~]$ curl 10.100.17.98:80[qq@k8snode1 ~]$ kubectl expose deploy nginx --name=svc-nginx2 --type=NodePort --port=80 --target-port=80 -n devservice/svc-nginx2 exposed《可以指定NodePort来实现外部访问》[qq@k8snode1 ~]$ kubectl get svc,pods -n devNAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGEservice/svc-nginx1 ClusterIP 10.100.17.98 <none> 80/TCP 54mservice/svc-nginx2 NodePort 10.110.195.194 <none> 80:32078/TCP 42s《这里要注意,通过本机的浏览器访问10.110.195.194IP的32078端口》NAME READY STATUS RESTARTS AGEpod/nginx-64b7c758f4-46xld 1/1 Running 0 65mpod/nginx-64b7c758f4-k2gk5 1/1 Running 0 65mpod/nginx-64b7c758f4-wwhn4 1/1 Running 0 65m[qq@k8snode1 ~]$ kubectl delete svc svc-nginx1 -n devservice "svc-nginx1" deleted《删除svc 命令》[qq@k8snode1 ~]$ kubectl get svc,pods -n devNAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGEservice/svc-nginx2 NodePort 10.110.195.194 <none> 80:32078/TCP 3m53sNAME READY STATUS RESTARTS AGEpod/nginx-64b7c758f4-46xld 1/1 Running 0 68mpod/nginx-64b7c758f4-k2gk5 1/1 Running 0 68mpod/nginx-64b7c758f4-wwhn4 1/1 Running 0 68m对象配置方式vi svcnginx.yamlapiVersion: v1kind: Servicemetadata: name: svc-nginx namespace: devspec: clusterIP: 10.109.179.231 #固定svc的内网ip ports: - port: 80 protocol: TCP targetPort: 80 selector: run: nginx type: ClusterIP[qq@k8snode1 ~]$ kubectl apply -f svcnginx.yamlservice/svc-nginx created[qq@k8snode1 ~]$ kubectl delete -f svcnginx.yamlservice "svc-nginx" deleted
版权声明:本文转载于今日头条,版权归作者所有,如果侵权,请联系本站编辑删除