南京网站建设哪里好,可以浏览国外网站,机电工程东莞网站建设技术支持,在线教育平台**service分类 : ** **ClusterIP : ** 默认类型#xff0c;自动分配一个【仅集群内部】可以访问的虚拟IP **NodePort : ** 对外访问应用使用#xff0c;在ClusterIP基础上为Service在每台机器上绑定一个端口#xff0c;就可以通过: ipNodePort来访问该服务 **LoadBalanc…**service分类 : ** **ClusterIP : ** 默认类型自动分配一个【仅集群内部】可以访问的虚拟IP **NodePort : ** 对外访问应用使用在ClusterIP基础上为Service在每台机器上绑定一个端口就可以通过: ipNodePort来访问该服务 **LoadBalancer : ** 使在NodePort的基础上借助公有云创建一个外部负载均衡器并将请求转发到NodePort 可以实现集群外部访问服务的另外一种解决方案不过并不是所有的k8s集群都会支持大多是在公有云托管集群中会支持该类型 **ExternalName : ** 把集群外部的服务引入到集群内部来在集群内部直接使用。没有任何类型代理被创建这只有 Kubernetes 1.7或更高版本的kube-dns才支持。 **service和pod之间是通过 selector.app进行关联的 : **
spec: # 描述selector: # 标签选择器确定当前service代理控制哪些podapp: xdclass-nginx**yml模板文件 : **
apiVersion: v1
kind: Service
metadata:creationTimestamp: nullname: xdclass-svc
spec:ports:- port: 80 # service服务端口protocol: TCPtargetPort: 80 # pod端口常规和容器内部端口一致selector:app: xdclass-nginx-pod
status:loadBalancer: {}**关于K8S中端口的概念区分 : **
**port **
是service端口即k8s中服务之间的访问端口 clusterIP:port 是提供给集群内部客户访问service的入口
**nodePort **
容器所在node节点的端口通过nodeport类型的service暴露给集群节点外部可以访问的端口
**targetPort **
是pod的端口 从port和nodePort来的流量经过kube-proxy流到后端pod的targetPort上进入容器。
**containerPort **
是pod内部容器的端口targetPort映射到containerPort。 4种端口作用不一样port和nodePort都是service的端口port暴露给集群内客户访问服务nodePort暴露给集群外客户访问服务这两个端口到来的数据都需要经过反向代理kube-proxy流入后端pod的targetPod从而到达pod中的容器
apiVersion: v1
kind: Pod
metadata:name: nginxnamespace: devlabels:app: nginx
spec:containers:- name: nginximage: nginx:1.20imagePullPolicy: IfNotPresentports:- containerPort: 80 #容器端口
---
apiVersion: v1
kind: Service
metadata:name: nginx
spec:type: NodePort # 有配置NodePort外部可访问k8s中的服务 ports:- name: nginxport: 80 # 服务service的访问端口protocol: TCPtargetPort: 80 # pod端口,映射到容器端口nodePort: 30015 # NodePort通过nodeport类型的service暴露给集群外部访问selector:app: nginx**操作 : **
# 创建Deployment
kubectl apply -f deploy-nginx-pod.yaml# 查看deployment和pod (service的缩写是svc)
kubectl get deployment,pod,svc -n dev -o wide# 暴露服务 clusterIP 类型
kubectl expose deploy xdclass-deploy --namesvc-nginx1 --typeClusterIP --port80 --target-port80 -n dev# 查看服务多了个类型是ClusterIP的通过curl clusterIpport可以访问
kubectl get deployment,pod,svc -n dev -o wide# 查看服务详情
kubectl describe svc svc-nginx1 -n dev**NodePort : **
# 创建NodePort类型服务 网络安全组记得开放32451端口
kubectl expose deploy xdclass-deploy --namesvc-nodeport-nginx1 --typeNodePort --port80 --target-port80 -n dev# 查看服务详情
kubectl describe svc svc-nodeport-nginx1 -n devEndpoint缩写是ep
是k8s中的一个资源对象存储在etcd中记录service对应的所有pod的访问地址里面有个Endpoints列表就是当前service可以负载到的pod服务入口service和pod之间的通信是通过endpoint实现的
# 查看endpoint列表
kubectl get ep svc-nodeport-nginx1 -n dev -o wideservice如何决定分发请求到后端的Pod kubernetes提供了两种负载均衡策略
默认kube-proxy的策略如随机、轮询使用会话保持模式即同个客户端的请求固定到某个pod在spec中添加sessionAffinity:ClientIP即可
**操作 : **
#查看全部pod和ip
kubectl get pods -n dev -o wide#修改pod里面容器nginx的默认静态页面,内容为Pod所在的ip
kubectl exec -it xdclass-deploy-64967f6b67-p66wh -n dev /bin/shecho xdclass.net 5 /usr/share/nginx/html/index.html# curl访问ipport 或 浏览器直接访问