kubernetes proxy简介

本文详述了Kubernetes中的proxy机制,包括kubectl proxy作为用户访问apiserver的反向代理,apiserver proxy用于连接集群内外,kube proxy实现在节点上的服务代理和负载均衡,以及外部云负载均衡器的角色。这些proxy在集群中起到关键的连接和管理作用。

本文解释kubernetes中涉及到的各种proxy。

参考文档:https://kubernetes.io/docs/concepts/cluster-administration/proxies/

proxy

在使用kubernetes时可能会遇到如下几种proxy。

1.kubectl proxy

  • runs on a user’s desktop or in a pod
  • proxies from a localhost address to the Kubernetes apiserver
  • client to proxy uses HTTP
  • proxy to apiserver uses HTTPS
  • locates apiserver
  • adds authentication headers

以上是官方文档原文内容,个人认为不准确且有误导性。第一条说kubectl proxy运行在用户桌面或者是一个pod中,实际是可根据情况运行在任何合适的位置。第二条,说的是kubectl proxy将localhost地址代理到kubernetes apiserver。实际是在运行kubectl proxy命令时通过设置address选项,可以指定任何本机可用的网口,如果不指定的话默认值才是localhost。

kubectl proxy有很多选项,详细参考这里。简单的运行命令如下:

$ kubectl proxy --address=xxx.xxx.xxx.xxx --port=8080 &

本质上kubectl proxy为访问kubernetes apiserver的REST api充当反向代理角色,这里反向代理的作用与通常意义上的反向代理作用相同,比如提供统一入口进行访问控制、监控、管理,在代理中管理后端,在代理中进行认证等。当然可以不经过kubectl proxy反向代理直接访问kubernetes apiserver的REST api,但是需要手动管理kubernetes apiserver的地址、手动获取token、手动将token加请到请求的头部,相对来说要繁琐而已。

2.apiserver proxy

  • is a bastion built into the apiserver
  • connects a user outside of the cluster to cluster IPs which otherwise might not be reachable
  • runs in the apiserver processes
  • client to proxy uses HTTPS (or http if apiserver so configured)
  • proxy to target may use HTTP or HTTPS as chosen by proxy using available information
  • can be used to reach a Node, Pod, or Service
  • does load balancing when used to reach a Service

apiserver作为用户与kubernetes集群交互的接口,负责响应用户请求,与此同时,它本身也是一个访问集群内部资源的代理。例如,集群内有一个名为service_name的服务,端口号是port_name,这个服务本身具备集群IP,但是众所周知集群IP是一个虚拟IP,对于集群以外的世界来说,这个IP无法被识别。那么如何从外部世界访问这个服务呢?一种方法就是通过本节所介绍的apiserver proxy,当然前提条件是外界能够访问到apierver ,如果不能的话可以按第一节所介绍的kubectl proxy为apiserver设置反向代理,使它能够被外部世界访问。手动构建如下格式请求:

https:: http://apiserver address/api/v1/namespaces/namespace_name/services/service_name:[port_name]/proxy

在上例中,通过服务名称、服务端口号称、服务所属的名称空间,通过apiserver的代理实现对服务的访问,至于访问最终是如何路由到真正运行中的容器实例由kubernetes系统内部的机制实现。

3.kube proxy

  • runs on each node
  • proxies UDP and TCP
  • does not understand HTTP
  • provides load balancing
  • is just used to reach services

kube proxy运行在集群中的每一个节点上,专门用于访问service的路由。当在集群内部访问某个service时,就是由它将集群IP映射成pod IP,或者说将流量转发到运行中的pod实例上,如果存在多个pod实例,kube proxy同时也会负责负载均衡。

4.位于apiserver之前的proxy或者负载均衡器
  • existence and implementation varies from cluster to cluster (e.g. nginx)
  • sits between all clients and one or more apiservers
  • acts as load balancer if there are several apiservers.

这里与第一节中的kubectl proxy的概念一致,就是位于apiserver之前,专门用于访问apiserver的代理或者负载均衡器。kubectl proxy其中的一种实现方式,也可以通过其它技术实现如nginx等以提供更多的功能,如果有多个apiserver,在提供代理的同时也提供多个apiserver之间的负载均衡。

5.处理外部的云负载均衡器
  • are provided by some cloud providers (e.g. AWS ELB, Google Cloud Load Balancer)
  • are created automatically when the Kubernetes service has type LoadBalancer
  • use UDP/TCP only
  • implementation varies by cloud provider.

由云服务商提供的负载均衡器,在创建service时,如果指定其类型为LoadBalancer,则对服务的代理、负载均衡将会绕过默认的kube proxy,而是由设定的外部云服务商提供的负载均衡器负责。

### 关于Kubernetes代理配置文件的例子及其解释 对于Kubernetes集群中的组件通信,`kube-proxy`是一个至关重要的部分。它维护着网络规则并执行连接转发逻辑,使得Pod间的通信成为可能。下面提供了一个典型的`kube-proxy`配置文件实例以及各参数的意义。 #### 配置文件示例 ```yaml apiVersion: kubeproxy.config.k8s.io/v1alpha1 kind: KubeProxyConfiguration mode: "iptables" clusterCIDR: "10.244.0.0/16" clientConnection: kubeconfig: "/var/lib/kube-proxy/kubeconfig.conf" metricsBindAddress: "0.0.0.0:10249" healthzBindAddress: "0.0.0.0:10256" featureGates: SupportIPVSProxyMode: true ipvs: scheduler: "rr" ``` 此YAML文档定义了如何设置`kube-proxy`的行为[^1]: - `apiVersion`: 指定API版本。 - `kind`: 表明这是一个`KubeProxyConfiguration`类型的对象。 - `mode`: 设置工作模式为`iptables`,这是默认选项之一;其他可选值有`userspace`和`ipvs`。 - `clusterCIDR`: 定义用于分配给服务端点的地址范围。 - `clientConnection`: 包含与API服务器交互所需的信息,比如路径到`kubeconfig`文件的位置。 - `metricsBindAddress`: 设定了性能指标监听接口及端口。 - `healthzBindAddress`: 健康状态检查绑定地址。 - `featureGates`: 启用特定特性的开关,在这里启用了支持`IPVS`代理模式的功能门控。 - `ipvs.scheduler`: 当选择了`ipvs`作为操作模式时使用的调度算法名称(例如轮询`rr`)。 通过上述配置项可以调整`kube-proxy`的工作方式以适应不同的环境需求。值得注意的是,实际部署过程中还需要考虑安全性等因素,并根据具体情况进行适当修改。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值