k8s的Service详解

Pod是非永久性资源,会动态创建和销毁,pod的ip会变化。这会导致一类Pod(业务1)访问另一类Pod(业务2)需要找出并跟踪Pod(业务2)的IP地址,再者Pod(业务2)是多个的,如何提供负载均衡呢?虽然Pod1通过轮询一组Pod的ip可以实现,但会Pod就需要增加负载均衡的逻辑,Pod就变得不纯粹了,不符合单一设计原则。于是有了Service,把一类Pods上的应用程序抽象成服务,并提供可以访问他们的策略。

有两种方式: 选择算符的Service 没有选择算符的Service

这是最常见的方式,指定 spec.selector 即通过打标签的方式,主要是针对集群内部同命名空间的Pod

创建上面的Service,会自动创建相应的 Endpoint 对象

查看自动创建的Endpoint对象

主要是针对希望服务指向另一个名字空间或者其他集群中的服务,比如外部的ES集群

此服务没有选择算符,因此不会自动创建相应的 Endpoint 对象, 需要手动动添加 Endpoint 对象,将服务手动映射到运行该服务的网络地址和端口

该模式下,节点上kube-proxy 持续监听 Service 以及 Endpoints 对象的变化,并设置进本地节点iptables,请求反向代理全部交给 iptables 来实现。每个Node节点都会配置所有Service进iptables,当捕获到Service的clusterIP和端口请求,利用注入的iptables,将请求重定向到Service的对应的Pod,v1.2版本之后的默认模式。

通过查看iptables规则可以看到:

kube-proxy 在 iptables 模式下随机选择一个后端Pod,利用Pod 就绪探测器验证Pod是否正常,kube-proxy只会把正常的Pod写入iptables,避免流量进入不正常的Pod。

kube-proxy 会监视 Kubernetes 控制平面对 Service 对象和 Endpoints 对象的添加和移除操作。 对每个 Service,它会在本地 Node 上打开一个端口(随机选择)。请求先经过iptables规则,当捕获到达Service 的 clusterIP和 Port 的请求,并重定向到代理端口(kube-proxy),再由代理端口再代理请求到后端Pod(v1.2版本之前的默认模式)

IPVS模式是利用linux的IPVS模块实现,同样是由kube-proxy实时监视集群的service和endpoint,调用netlink接口相应的创建ipvs规则,由ipvs实现负载均衡访问。IPVS 专为负载平衡而设计,并基于内核内哈希表,有更高的网络流量吞吐量(iptables 模式在大规模集群 比如10000 个服务中性能下降显著),并且具有更复杂的负载均衡算法(最小连接、局部性、 加权、持久性)。(v1.8以后新支持的)

上面讲的Pod之间调用,采用Service进行抽象,服务之间可以通过clusterIP 进行访问调用,不用担心Pod的销毁重建带来IP变动,同时还能实现负载均衡。但是clusterIP也是有可能变动,况且采用IP访问始终不是一种好的方式。通过 DNS 环境变量 可以实现通过服务名现在访问。

k8s采用附加组件(CoreDNS)为集群提供DNS服务,会为每个服务创建DNS记录,CoreDNS只为Service和Pod创建DNS记录。kubernetes强烈推荐采用DNS方式.

例如,如果你在 Kubernetes 命名空间 my-ns 中有一个名为 my-service 的服务, 则控制平面和 DNS 服务共同为 my-service.my-ns 创建 DNS 记录。 my-ns 命名空间中的 Pod 应该能够通过按名检索 my-service 来找到服务,其他命名空间中的 Pod 必须将名称限定为 my-service.my-ns 。 这些名称将解析为为服务分配的集群 IP。

Kubernetes 还支持命名端口的 DNS SRV(服务)记录。 如果 my-service.my-ns 服务具有名为 http 的端口,且协议设置为 TCP, 则可以对 _http._tcp.my-service.my-ns 执行 DNS SRV 查询查询以发现该端口号, "http" 以及 IP 地址

当 Pod 运行在 Node上,kubelet 会为每个活跃的 Service 添加一组环境变量。 简单的 {SVCNAME}_SERVICE_HOST 和 {SVCNAME}_SERVICE_PORT 变量。 这里 Service 的名称需大写,横线被转换成下划线。

举个例子,一个名称为 nginx-svc 的 Service 暴露了 TCP 端口 8080, 同时给它分配了 Cluster IP 地址 10.0.0.11,这个 Service 生成了如下环境变量:

进入example容器,env打印环境变量:

访问Nginx服务可以使用



  • k8s鐨凷ervice璇﹁В
    绛旓細k8s閲囩敤闄勫姞缁勪欢锛圕oreDNS锛変负闆嗙兢鎻愪緵DNS鏈嶅姟锛屼細涓烘瘡涓湇鍔″垱寤篋NS璁板綍锛孋oreDNS鍙负Service鍜孭od鍒涘缓DNS璁板綍銆俴ubernetes寮虹儓鎺ㄨ崘閲囩敤DNS鏂瑰紡.渚嬪锛屽鏋滀綘鍦 Kubernetes 鍛藉悕绌洪棿 my-ns 涓湁涓涓悕涓 my-service 鐨勬湇鍔★紝 鍒欐帶鍒跺钩闈㈠拰 DNS 鏈嶅姟鍏卞悓涓 my-service.my-ns 鍒涘缓 DNS 璁板綍銆 my-ns 鍛藉悕...
  • Linux閲岄潰k8s閲岄潰kind:service浠h〃浠涔堟剰鎬?
    绛旓細K8s service鍙互鐞嗚В涓哄涓缁凱od鐨勬娊璞銆傜被浼间簬Nginx鑳藉鎶婅姹傝浆鍙 鐨 瀵瑰簲鐨勬湇鍔′笂銆2 Service浣滅敤 2.1 pod浣跨敤鏃跺洜鏌愪簺闂閲嶅惎锛屼粠鑰屽鑷磒od 鐨処P鍙戠敓鍙樺寲锛屼細瀵艰嚧鏃х殑IP涓嶈兘鐢紝褰卞搷鐢ㄦ埛瀵圭郴缁熶娇鐢ㄣ俿ervice鐨勫嚭鐜板緢濂 鐨 瑙e喅姝ら棶棰橈紝瀹㈡埛绔氳繃service 璁块棶pod锛屽綋podIP鏈夊彉鍖栦篃涓嶄細褰卞搷(service...
  • 銆K8s 绮鹃夈慘ubernetes Service 浠嬬粛
    绛旓細鈶 Coredns 锛氳礋璐f妸 Service 鍚嶅瓧锛堢被浼煎煙鍚嶏級瑙f瀽涓 Service 铏氭嫙 IP 鍗 ClusterIP锛屽悓鏃惰娴 Service 鐨勫彉鍖栥 鈶 Kube-proxy 锛氳礋璐f妸 Service 铏氭嫙 IP 鍗 ClusterIP 杞崲涓哄悗绔 Pod IP锛屽悓鏃惰娴嬪悗绔 Pod 鐨勫彉鍖栥傚涓婃灦鏋勫浘绀轰緥锛孋lient Pod3 璁块棶 Service 鐨勬楠わ細 鈶 Coredns 瑙...
  • Kubernetes鈥斺Service(SVC)鏈嶅姟
    绛旓細Kubernetes Service瀹氫箟浜嗚繖鏍蜂竴绉嶆娊璞★細涓涓狿od鐨勯昏緫鍒嗙粍锛屼竴绉嶅彲浠ヨ闂畠浠殑绛栫暐 鈥斺 閫氬父绉颁负寰湇鍔銆傝繖涓缁凱od鑳藉琚玈ervice璁块棶鍒帮紝閫氬父鏄氳繃Label Selector Service鑳藉鎻愪緵璐熻浇鍧囪 鐨勮兘鍔涳紝浣嗘槸鍦ㄤ娇鐢ㄤ笂鏈変互涓嬮檺鍒讹細Service 鍦 K8s 涓湁浠ヤ笅鍥涚绫诲瀷 svc鍩虹瀵艰 鍦 Kubernetes 闆嗙兢涓紝姣忎釜 Node ...
  • Kubernetes Service鍘熺悊瑙f瀽
    绛旓細Service 鏄负涓缁勫叿鏈夌浉鍚屽姛鑳界殑Pod鎻愪緵涓涓粺涓鐨勫叆鍙e湴鍧锛屽苟灏嗚姹傝繘琛岃礋杞藉潎琛″湴鍒嗗彂鍒板悇涓狿od涓銆侰lusterIP绫诲瀷鐨凷ervice鏄疜ubernetes闆嗙兢榛樿鐨凷ervice, 瀹冨彧鑳界敤浜庨泦缇ゅ唴閮ㄩ氫俊銆備笉鑳界敤浜庡閮ㄩ氫俊銆侹8s浼氫负姣忎釜Service鍒嗛厤涓涓櫄鎷烮P锛屽嵆ClusterIP銆傝繖涓櫄鎷烮P鍙兘鍦ㄩ泦缇ゅ唴閮ㄨ闂傘侼odePort绫诲瀷鐨凷ervice浼...
  • k8s璧勬簮绫诲瀷涓昏鏈
    绛旓細k8s璧勬簮绫诲瀷涓昏鏈塒od銆丏eployment銆Service銆1銆丳od Pod鏄痥ubernetes闆嗙兢杩涜绠$悊鐨勬渶灏忓崟鍏冿紝绋嬪簭瑕佽繍琛屽繀椤婚儴缃插湪瀹瑰櫒涓紝鑰屽鍣ㄥ繀椤诲瓨鍦ㄤ簬Pod涓侾od鍙互璁や负鏄鍣ㄧ殑灏佽锛屼竴涓狿od涓彲浠ュ瓨鍦ㄤ竴涓垨澶氫釜瀹瑰櫒銆俴ubernetes鍦ㄩ泦缇ゅ惎鍔ㄤ箣鍚庯紝闆嗙兢涓殑鍚勪釜缁勪欢涔熸槸浠od鏂瑰紡杩愯鐨勩2銆丏eployment Deployment鐢ㄤ簬...
  • k8s service涓嶪ngress
    绛旓細service鏄痯od鐨勪竴涓昏緫鍒嗙粍锛屾槸pod鏈嶅姟鐨勫澶栧叆鍙f娊璞°俿ervice鍚屾牱涔熼氳繃pod鐨勬爣绛炬潵閫夋嫨pod锛屼笌鎺у埗鍣ㄤ竴鑷淬俿ervice鎻愪緵pod鐨勮礋杞藉潎琛$殑鑳藉姏锛屼絾鏄彧鎻愪緵4灞傝礋杞藉潎琛$殑鑳藉姏锛岃屾病鏈7灞傚姛鑳斤紝鍙兘鍒癷p灞傞潰銆備换鎰忔壘涓猵od鏉ヨ闂湇鍔★紝閫氳繃 kubectl exec -it podname sh 鏉ュpod鎵цsh鍛戒护锛岃繖鏍峰彲浠ヨ繘鍏...
  • Kubernetes杩涢樁涔嬭矾(涔)Service绯诲垪涔婥lusterIP&NodePort
    绛旓細鍦ㄥ畾涔塖ervice鐨勬椂鍊欏彲浠ユ寚瀹氫竴涓嚜宸遍渶瑕佺殑绫诲瀷鐨凷ervice锛屽鏋滀笉鎸囧畾鐨勮瘽榛樿鏄疌lusterIP绫诲瀷銆傚彲浠ヤ娇鐢ㄧ殑鏈嶅姟绫诲瀷濡備笅锛氶氳繃闆嗙兢鐨勫唴閮 IP 鏆撮湶鏈嶅姟锛岄夋嫨璇ュ硷紝鏈嶅姟鍙兘澶熷湪闆嗙兢鍐呴儴鍙互璁块棶锛岃繖涔熸槸榛樿鐨凷ervice绫诲瀷銆侰lusterIP绫诲瀷鐨剆ervice鍒涘缓鏃讹紝k8s浼氶氳繃etcd浠庡彲鍒嗛厤鐨処P姹犱腑鍒嗛厤涓涓狪P锛岃IP鍏ㄥ眬...
  • k8s缃戠粶鍘熺悊-ipvs
    绛旓細  k8s涓鐨刣ns榛樿浣跨敤鐨勬槸coredns,閫氳繃浠ヤ笅鍛戒护鏌ョ湅銆俴8s涓畾涔鐨剆ervice鏄湁鍩熷悕鐨,璁块棶鍩熷悕瑕侀氳繃dns瑙f瀽,姝ゆ椂coredns灏卞彂鎸ュ畠鐨勪綔鐢ㄤ簡銆   涓婇潰鐨勮瘯楠屾椂鎴戜滑鍒涘缓浜嗕竴涓猰y-service 鐨刵odePort鐨剆ervice,姝ゆ椂鏌ョ湅涓涓嬫鍩熷悕瀵瑰簲鐨刬p,濡備笅鍥炬墍绀,鍩熷悕瑙f瀽鍑烘潵鐨刬p涓巗ervice瀵瑰簲鐨刬p鐩稿悓,澶у姛鍛婃垚銆 鍙傝: ...
  • K8S涔Service浠g悊妯″紡
    绛旓細IPVS妯″紡鏈変互涓嬩紭鐐癸細IPVS浠g悊妯″紡鍩轰簬绫讳技浜巌ptables妯″紡鐨刵etfilter鎸傞挬鍑芥暟锛屼絾鏄娇鐢ㄥ搱甯岃〃浣滀负鍩虹鏁版嵁缁撴瀯锛屽苟涓斿湪鍐呮牳绌洪棿涓伐浣溿傝繖鎰忓懗鐫锛屼笌iptables妯″紡涓嬬殑kube-proxy鐩告瘮锛孖PVS妯″紡涓嬬殑kube-proxy鍙互浠ヨ緝浣庣殑寤惰繜閲嶅畾鍚戦氫俊锛屽苟涓斿湪鍚屾浠g悊瑙勫垯鏃跺叿鏈夋洿濂界殑鎬ц兘銆備笌鍏朵粬浠g悊妯″紡鐩告瘮锛孖PVS妯″紡杩樻敮鎸...
  • 扩展阅读:www.sony.com.cn ... k8手机经典版最新款2024 ... 经典k8线理论 ... e人e本t8s和k8s ... k82经典版最新电视 ... k8线经典网 ... k8手机经典网 ... k82手机经典版电影 ... k2经典片 ...

    本站交流只代表网友个人观点,与本站立场无关
    欢迎反馈与建议,请联系电邮
    2024© 车视网