K3s Load Balancer(Rancher LB)

K8S中访问服务的4种方式中的原生的LB方式是需要依赖公有云LB服务支持的。
K3S设计了Service LB Controller,其专门为K3S集群而设计一个控制器。可以通过设置Service的type为LoadBalancer来使用,没有K8S那种对公有云LB服务支持的依赖要求了。

K3s - Service LB Controller

在这里插入图片描述
在这里插入图片描述

作用:创建iptables的转发规则对流量进行转发;限制:一个svclb独占一个port;操作:只需要将一个svc的type设置为LB,它就会自动处理相关工作。

在这里插入图片描述

[root@k3s-rancher2 ~]# kubectl get svc traefik -n kube-system
NAME      TYPE           CLUSTER-IP      EXTERNAL-IP                   PORT(S)                      AGE
traefik   LoadBalancer   10.43.198.245   <none>   80:32077/TCP,443:31575/TCP   6d12h
[root@k3s-rancher2 ~]# kubectl get ds -n kube-system
NAME            DESIRED   CURRENT   READY   UP-TO-DATE   AVAILABLE   NODE SELECTOR   AGE
svclb-traefik   2         2         2       2            2           <none>          6d9h
[root@k3s-rancher2 ~]# kubectl get pod -n kube-system |grep svclb-traefik
svclb-traefik-wnw28                       2/2     Running   2          6d9h
svclb-traefik-vgfb5                       2/2     Running   6          6d9h
[root@k3s-rancher2 ~]# iptables -t nat -nvL |grep 80 |grep DNAT
    0     0 DNAT       tcp  --  *      *       0.0.0.0/0            0.0.0.0/0            tcp dpt:80 to:10.42.1.30:80
[root@k3s-rancher2 ~]# kubectl get pod -n kube-system -owide -A |grep 10.42.1.30
kube-system                 svclb-traefik-wnw28                       2/2     Running   2          6d12h   10.42.1.30      k3s-rancher2   <none>           <none>
----------------------------------------------
# 命令行进入 svclb-traefik-wnw28 这个pod
----------------------------------------------
/ # iptables -t nat -nvL |grep 80
    0     0 DNAT       tcp  --  *      *      !10.43.198.245        0.0.0.0/0            tcp dpt:80 to:10.43.198.245:80
----------------------------------------------
# 退出pod命令行
----------------------------------------------
[root@k3s-rancher2 ~]# kubectl get svc -n kube-system -owide -A |grep 10.43.198.245
kube-system           traefik           LoadBalancer   10.43.198.245   <none>   80:32077/TCP,443:31575/TCP   6d12h   app.kubernetes.io/instance=traefik,app.kubernetes.io/name=traefik

----------------------------------------------
最后svc和pod之间通过 selector(instance、name)、port、targetPort 进行关联

网络转发拓扑图

在这里插入图片描述


(END)

Kubernetes(k8s)的Service资源类型可以配置为负载均衡器(LoadBalancer),从而实现将外部流量导入到集群内部的服务中。通过配置外部IP,可以实现以下目标: 1. 自动配置负载均衡:在支持云平台的环境中,创建带有LoadBalancer类型的服务会自动在云提供商的基础设施上创建一个负载均衡器,并将流量转发到服务对应的Pods。 2. 控制访问入口:通过指定外部IP,可以自定义访问集群服务的外部IP地址,这可以是固定的、在特定范围内的IP地址,也可以是一个域名。 3. 高可用性:在多节点的Kubernetes集群中,外部IP可以关联到多个节点的网络接口上,实现高可用性的服务访问。 要配置一个带有外部IP的LoadBalancer服务,你可以通过定义一个Service资源的YAML配置文件来完成。下面是一个简单的配置示例: ```yaml apiVersion: v1 kind: Service metadata: name: my-loadbalancer-service spec: type: LoadBalancer loadBalancerIP: 123.123.123.123 # 这里的123.123.123.123是你想要配置的外部IP地址 ports: - protocol: TCP port: 80 targetPort: 8080 selector: app: my-app ``` 在这个例子中,我们创建了一个名为`my-loadbalancer-service`的服务,指定了类型为`LoadBalancer`,并且配置了一个静态的外部IP地址`123.123.123.123`。同时定义了服务暴露的端口和后端Pod的目标端口。 请注意,如果你使用的是不支持自动创建云负载均衡器的环境,或者配置的外部IP不是由云提供商分配的,那么这个外部IP地址需要手动确保已经存在并且路由正确,否则外部流量将无法到达服务。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

catoop

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值