当前位置: 首页 > news >正文

Kubernetes学习之通过Service访问Pod

一、基础概述

        1.当通过deployment等controller动态创建和销毁pod使得每个pod都有自己的ip地址,当controller用新的pod替代发生故障的pod时,新的pod会分配到新的ip地址,那么客户端如何稳定的找到并访问pod提供的服务。

        2.创建service

                service从逻辑上代表一组pod(是由label挑选出来),service拥有自己的ip,这个ip地址不变,客户端只需要访问service的ipkubernetes负责建立和维护service和pod之间的映射关系

                                        

                上述两个图表示创建一个deployment并启动了三个pod运行httpd镜像,其中标签为label(run:httpd),service会用这个label来挑选pod。

                

                其中三个pod都分配到各自的ip,这些ip地址只能被kubernetes cluster中的容器和节点访问。

                

                上述示例创建了一个service,其中service的名字为httpd-svc,其selector指明挑选那些label为run:httpd的pod作为service的后端,并将service的8080端口映射到pod的80端口

                

                如上图所示可得,http-svc分配到一个cluster-ip,可以通过该ip访问后端的httpd pod。

                通过kubectl describe可以查看httpd-svc与pod的对应关系:

                

                上图中罗列了三个pod的ip和端口

        3.cluster ip的底层实现:

                cluster ip是一个虚拟ip,是由kubernetes节点上的iptables规则管理

                iptables中大概的规则是:如果cluster内部的pod要访问httpd-svc则允许,其他源地址访问httpd-svc,跳转到相应的规则上。iptables将访问service的流量转发到后端pod并使用轮询的负载均衡策略

                注:cluster的每一个节点都配置了相同的iptables规则,这样可以确保整个cluster都能够通过service的cluster ip访问service。

        4.dns访问service:

                因为kubeadm在部署时会默认安装kube-dns组件,每当有新的的service被创建,kube-dns会添加该service的dns记录,其cluster中的pod可以通过<service_name>.<namespace_name>访问service。

                例如可以用httpd-svc.default来访问Service httpd-svc,其中default可以省略,可以直接使用httpd-svc来访问。

                dns服务器是kube-dns.kube-system.svc.cluster.local,这个实际上就是kube-dns组件,其本身部署在kube-system namespace中的一个service。

                如果需要访问其他namespace中的service,就必须带上namespace,kubectl  get  namespace可以查看已有的namespace。

        5.外网如何访问service:

               kubernetes提供了多种类型的service,默认为cluster ip

                clusterIP:service通过cluster内部的ip对外提供服务,只有cluster内的节点和pod可以访问

                nodeport:service通过cluster节点的静态端口对外提供服务,cluster外部可以通过<nodeip>:<nodeport> 访问service。

                loadbalancer:cloud  provider负责将load balancer的流量导入service。

                                                    

                上述示例为nodeport模式下的service,其中8080是clusterip监听的端口,32312为节点上监听的端口,每个节点都会监听此端口并将请求转发给service。

                

                测试示例:通过三个节点ip+32312端口都可以访问httpd-svc,其访问的原理和clusterIP一样,也是借助iptables。

                

                配置文件中的三个port:

                        nodeport是节点上监听的端口

                        port是clusterIP上监听的端口

                        targetport是pod上监听的端口

                其中node和clusterIp在各自端口上接收的请求都会通过iptables转发到pod的targetPort

http://www.lryc.cn/news/531291.html

相关文章:

  • 【Numpy核心编程攻略:Python数据处理、分析详解与科学计算】2.18 对象数组:在NumPy中存储Python对象
  • Web - CSS3基础语法与盒模型
  • CSS知识总结
  • 基于Spring Security 6的OAuth2 系列之十 - 授权服务器--刷新token
  • 信息学奥赛一本通 2113:【24CSPJ普及组】小木棍(sticks) | 洛谷 P11229 [CSP-J 2024] 小木棍
  • 安装hami的笔记
  • 【区块链】区块链密码学基础
  • 强化学习笔记(5)——PPO
  • 【C语言入门】解锁核心关键字的终极奥秘与实战应用(三)
  • 寒假day10
  • 本地部署与使用SenseVoice语音大模型简析
  • Kafka SASL/SCRAM介绍
  • 中间件漏洞之CVE-2024-53677
  • pytorch基于 Transformer 预训练模型的方法实现词嵌入(tiansz/bert-base-chinese)
  • Windows电脑本地部署运行DeepSeek R1大模型(基于Ollama和Chatbox)
  • 区间覆盖问题
  • 【LLM-agent】(task2)用llama-index搭建AI Agent
  • SpringAI 人工智能
  • 【axios二次封装】
  • P7497 四方喝彩 Solution
  • 深入剖析 Bitmap 数据结构:原理、应用与优化策略
  • bypass hcaptcha、hcaptcha逆向
  • WebForms DataList 深入解析
  • C# List 列表综合运用实例⁓Hypak原始数据处理编程小结
  • 【C++基础】字符串/字符读取函数解析
  • 大模型-CLIP 详细介绍
  • 1.4 Go 数组
  • WebSocket——环境搭建与多环境配置
  • 三、递推关系与母函数,《组合数学(第4版)》卢开澄 卢华明
  • 线程互斥同步