Kubernetes探索-service面试

本文主要整理一下与k8s-service资源相关联的面试题,不足之处望各位大佬多多补充...

1. 简述kube-proxy的作用

kube-proxy运行在所有节点上,它监听apiserver中service和endpoint的变化情况,创建路由规则以提供服务IP和负载均衡功能。其核心功能是将到某个Service的访问请求转发到后端的多个Pod实例上。

2. 简述kube-proxy的工作原理

kube-proxy主要有两个版本的实现:基于iptables的k8s1.2版本 和 基于 ipvs的k8s1.8版本

1)kube-proxy iptables原理

k8s1.2 版本将iptables作为kube-proxy的默认模式。iptables模式下的kube-proxy不再起到Proxy的作用,其核心功能:通过API Server的Watch接口实时跟踪Service与Endpoint的变更信息,并更新对应的iptables规则,Client的请求流量则通过iptables的NAT机制“直接路由”到目标Pod。

2)kube-proxy ipvs原理

  • IPVS在k8s 1.8版本中引入,并在k8s 1.11中升级为GA稳定版;
  • IPVS则专门用于高性能负载均衡,并使用更高效的数据结构(Hash表),允许几乎无限的规模扩张,因此被kube-proxy采纳为最新模式;
  • 在IPVS模式下,使用iptables的扩展ipset,而不是直接调用iptables来生成规则链,可以大大减少iptables规则的数量,减少性能损耗。【iptables规则链是一个线性的数据结构,ipset是带索引的数据结构,因此当规则很多时,也可以很高效地查找和匹配】;

3)ipvs和iptables的异同

  • 共同点:都是基于Netfilter实现
  • 不同点iptables是为防火墙而设计的;ipvs则专门用于高性能负载均衡,并使用更高效的数据结构(Hash表),允许几乎无限的规模扩张。
  • ipvs的优势
    • 为大型集群提供了更好的可扩展性和性能;
    • 支持比iptables更复杂的复制均衡算法(最小负载、最少连接、加权等);
    • 支持服务器健康检查和连接重试等功能;
    • 可以动态修改ipset的集合,即使iptables的规则正在使用这个集合。
3. Service如何与Pod相关联?

标签选择器

4. Service有哪几种类型?
  • ClusterIP:表示service仅供集群内部使用,默认使用【ClusterIP + Ingress接入外部流量】;
  • NodePort:表示service可对外访问,会在每个节点暴露一个端口,通过【节点IP:NodePort】连接service;
  • LoadBalancer:表示service可对外访问,一般在公有云环境下配置,需要外部云厂商的支持;
  • ExternalName:这种类型的service会把集群外部的服务引入集群内部,这样集群内直接访问service就可以间接的使用集群外部服务;
5. Pod与Service是如何通信的?

1)k8s在创建服务时为服务分配一个虚拟IP,客户端通过该IP访问服务,服务则负责将请求转发到后端Pod上;

2)Service是通过kube-proxy服务进程实现,该进程在每个Node上均运行可以看作一个透明代理兼负载均衡器;

3)对每个TCP类型Service,kube-proxy都会在本地Node上建立一个SocketServer来负责接受请求,然后均匀发送到后端Pod默认采用Round Robin负载均衡算法;

4)Service的Cluster IP与NodePort等概念是kube-proxy通过Iptables的NAT转换实现,kube-proxy进程动态创建与Service相关的Iptables规则;

5)kube-proxy通过查询和监听API Server中Service与Endpoints的变化来实现其主要功能,包括为新创建的Service打开一个本地代理对象,接收请求针对针对发生变化的Service列表,kube-proxy会逐个处理;

6. 简述Kubernetes Service分发后端的策略

Service负载分发的策略有:RoundRobinSessionAffinity

  • RoundRobin:默认为轮询模式,即轮询将请求转发到后端的各个Pod上。
  • SessionAffinity:基于客户端IP地址进行会话保持的模式,即第1次将某个客户端发起的请求转发到后端的某个Pod上,之后从相同的客户端发起的请求都将被转发到后端相同的Pod上。
7. 简述service,endpoints,kube-proxy三者的关系service:service是一种为一组功能相同的pod提供单一不变的接入点的资源。

service被建立后,其IP和端口不会改变,这样外部的客户端(也可以是集群内部的客户端)通过service的IP和端口来建立链接,这些链接会被路由到提供该服务的任意一个pod上。通过这样的方式,客户端不需要知道每个单独提供服务的pod地址,这样pod就可以在集群中随时被创建或销毁。

endpoint:service维护一个叫endpoint的资源列表,endpoint资源对象保存着service关联的pod的ip和端口。

  • 当有pod删除时:endpoints controller会从service关联的endpoint列表中对应pod的ip:port;
  • 当有pod加入时: endpoints controller 会将该pod的ip:port加入到service关联的endpoint列表;

kube-proxy:运行在node节点上,在Node节点上实现Pod网络代理,维护iptables和负载均衡工作。

kube-proxy是Service的透明代理兼负载均衡器。kube-proxy会监听api-service以获取service和endpoints的变化情况,创建并维护路由规则以提供服务IP和负载均衡功能,其核心功能是将到某个Service的访问请求转发到后端的多个Pod实例上。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/589882.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

如何优化嵌入式系统的实时性能

大家好,今天给大家介绍如何优化嵌入式系统的实时性能,文章末尾附有分享大家一个资料包,差不多150多G。里面学习内容、面经、项目都比较新也比较全!可进群免费领取。 优化嵌入式系统的实时性能是一个综合性的任务,涉及到…

C++的并发世界(六)——互斥解决数据共享冲突

0.数据共享的问题 在多个线程中共享数据时。需要注意线程安全问题。如果多个线程同时访问同一个变量。并且其中至少有一个线程对该变量进行了写操作。那么就会出现数据竞争问题。数据竞争可能会导致程序崩溃,产生来定义的结果,或者得到错误的热果。为了避免数据竞争问题。需要…

github 多个账号共享ssh key 的设置方法

确认本机是否已有ssh key 首先确认自己系统内有没有 ssh key。 bash复制代码cd ~/.ssh ls *.pub # 列出所有公钥文件id_rsa.pub若有,确认使用当前 key 或者生成新 key,若没有,生成新 key。由于我需要登录两个帐号,所以在已经存在…

真·面试题总结——JVM虚拟机

JVM虚拟机 JVM虚拟机规范与实现 JVM虚拟机规范 JVM虚拟机实现 JVM的常见实现 JVM虚拟机物理架构 JVM虚拟机的运转流程 JVM类加载过程 JVM类加载器及类加载器类型 JVM类加载器双亲委派机制 JVM运行时数据区的内存模型 JVM运行时数据区的内存模型:程序计数器…

Transformer - Outputs(Shifted Right)

Transformer - Outputs(Shifted Right) flyfish 输入: “je suis etudiant” 预期输出 : “i am a student” 除了普通词汇之外,模型还引入了一些特殊token,常有的(start of sequence)、(end of sequence)…

算法学习 | day33/60 斐波那契数列/爬楼梯/使用最小花费爬楼梯

一、题目打卡 1.1 斐波那契数列 题目链接&#xff1a;. - 力扣&#xff08;LeetCode&#xff09; // class Solution { // public: // int fib(int n) { // if(n 0) return 0; // vector<int> dp(n 1); // dp[0] 0; // dp[1] 1…

《Effective C++》《构造/析构/赋值运算——8、别让异常逃离析构函数》

文章目录 1、Terms 8:Prevent exceptions from leaving destructors2、面试相关2.1. 析构函数是否可以抛出异常&#xff1f;为什么&#xff1f;2.2. 如果析构函数抛出异常&#xff0c;会有什么后果&#xff1f;2.3. 如何避免析构函数抛出异常&#xff1f;2.4. 构造函数和析构函…

AGI时代,LLM可以在AutoML哪些环节进行增强?

当下大模型技术发展如火如荼&#xff0c;颇有改变各行业和各领域的架势。那么对于AutoML来讲&#xff0c;LLM对其有哪些助力&#xff1f;对于这个问题&#xff0c;我们来问一问kimi chat&#xff0c;看看它怎么回答&#xff1f; 大型语言模型&#xff08;LLM&#xff09;可以在…