临沂网站建设优化,wordpress上一篇插件,网站建设论文参考文献,wordpress 提示K8S四层代理Service 四层负载均衡Service 在k8s中#xff0c;访问pod可以通过ip端口的方式#xff0c;但是pod是由生命 周期的#xff0c;pod在重启的时候ip地址往往会发生变化#xff0c;访问pod就需要新的ip地址#xff0c;这样就会很麻烦#xff0c;每次pod地址改变就…K8S四层代理Service 四层负载均衡Service 在k8s中访问pod可以通过ip端口的方式但是pod是由生命 周期的pod在重启的时候ip地址往往会发生变化访问pod就需要新的ip地址这样就会很麻烦每次pod地址改变就要修改访问ip。Service的引进解决了这种问题通过定义Service资源对象Service定义一个服务访问的入口客户端可以通过这个入口访问对应的pod就算pod重新生成ip发生变化Service依旧通过pod标签关联到这个pod避免连接失败这样看来Service可以看做是一组Pod的逻辑组合。 从下图可以看出客户端通过Service访问pod的方式 pid的ip经常变化service是pod的代理只要访问service就能代理到对应的pod pod的ip在集群外部是无法访问的通过service可以在集群之外的机器访问pod Service是一个固定接入层客户端可以通过访问Service的ipport访问到其关联的后端pod。这个service工作以来与k8s集群之上部署的dns附件现在的版本都是用的coredns。k8s要给客户端提供网络功能还需要依赖第三方网络插件flannel、calico等。每个k8s几点上都有一个组件kube-proxy始终监视着apiserver中有关service资源的变动信息跟master上的apiserver交互随时连接到apiserver获取任何一个与service资源相关的资源变动情况通过k8s中固有的请求方式watch实现一旦service资源内容发生变动如创建删除等kube-proxy都会将它转化成当前几点之上能够实现service资源调度把请求调度到后端特定pod资源之上的规则可能是iptables也可能是ipvs这个取决于service的实现方式。 k8s在创建Service的时候会根据标签选择器selector来查找pod据此创建与Service同名的endpoint对象当pod地址发生变化时endpoint也会随之发生变化service接收全段client请求时就会通过endpoint找到转发到哪个pod进行访问的地址至于转发到哪个节点的pod有负载均衡kube-proxy决定 k8s集群中的三类ip地址 Node Network节点网络物理节点或者虚拟节点的网络 Pod networkpod网络创建的pod的ip地址在创建集群时指定网段 ClusterNetwork集群地址也成为service network这是个虚拟的ip地址没有配置在某个接口上只是出现在service规则当中。 service的四种类型先创建一组pod然后分别用不同类型的service测试 vi service-pod.yaml
apiVersion: apps/v1
kind: Deployment
metadata:name: my-nginx
spec:replicas: 3selector:matchLabels:app: my-nginxversion: v1template:metadata:labels:app: my-nginxversion: v1spec:containers:- name: my-nginximage: 172.16.80.140/nginx/nginx:1.26imagePullPolicy: IfNotPresentports:- containerPort: 80ClusterIP 默认类型创建 Service 时默认类型为 ClusterIP。 作用为集群内部提供访问Service 会分配一个内部 IP只能在集群内部访问。 适用场景适用于集群内部服务间的通信。 bash vi service-clusterip.yaml apiVersion: v1 kind: Service metadata: name: my-service spec: selector: app: my-nginx ports: - protocol: TCP. # 协议类型 port: 80 # service的端口 targetPort: 80 # 对应pod中容器的端口 同时会创建一个endpoints简称ep


可通过访问service的方式访问到代理的pod即使pod被删除一个deploy创建一个新的podip发生变化但是pod标签没有变化service没有变化依然可以代理到所有同样标签的pod之上。NodePort 作用在 ClusterIP 基础上通过每个节点的 IP 和静态端口NodePort暴露服务外部可通过 : 访问。 端口范围默认范围为 30000-32767。 适用场景适用于需要从集群外部访问的服务。 上面的clusterip类型的service只能在集群内部访问无法在集群外部访问。为了解决这个问题可以使用NodePort类型的service bashvi service-nodeport.yaml kind: Servicemetadata:name: my-servicespec:type: NodePortselector:app: my-nginxports:- protocol: TCPport: 80targetPort: 80生成一个nodeport类型的service不但可以在集群内部访问还可以通过访问nodeport的方式访问端口可以指定也可以默认生成。其中node指集群中所有的节点。
LoadBalancer 作用在 NodePort 基础上使用云服务商的负载均衡器将服务暴露到外部自动分配外部 IP。 适用场景适用于在云环境中需要外部访问的服务。 ExternalName 作用将 Service 映射到外部 DNS 名称不提供负载均衡或代理仅返回 CNAME 记录。 适用场景适用于将服务指向外部资源。