kube-router之负载均衡器
  AJDqNpVvznez 2023年11月02日 52 0


kube-router之负载均衡器_ci

Kube-router是基于Kubernetes网络设计的一个集负载均衡器、防火墙和容器网络的综合方案。

主要功能

1. 基于IPVS/LVS的负载均衡器 | ​​--run-service-proxy​

kube-router采用Linux内核的IPVS模块为K8s提供Service的代理。

更多的详情可以参考:

2. 容器网络 | ​​--run-router​

kube-router利用BGP协议和Go的GoBGP库和为容器网络提供直连的方案。因为用了原生的Kubernetes API去构建容器网络,意味着在使用kube-router时,不需要在你的集群里面引入其他依赖。

同样的,kube-router在引入容器CNI时也没有其它的依赖,官方的“bridge”插件就能满足kube-rouetr的需求。

更多关于BGP协议在Kubernetes中的使用可以参考:

3. 网络策略管理 | ​​--run-firewall​

采用了kube-router的Kubernetes很容易通过添加标签到kube-router的方式使用​​网路策略​​功能。kube-router使用了ipset操作iptables,以保证防火墙的规则对系统性能有较低的影响。

Kube-router支持networking.k8s.io/NetworkPolicy的API或者其他基于网络策略的V1/GA语义。

更多关于kube-router防火墙的功能可以参考:

负载均衡器

kube-router的负载均衡器功能,会在物理机上创建一个虚拟的kube-dummy-if网卡,然后利用k8s的watch APi实时更新svc和ep的信息。svc的cluster_ip会绑定在kube-dummy-if网卡上,作为lvs的virtual server的地址。realserver的ip则通过ep获取到容器的IP地址。

一个单纯的负载均衡器部署如下:

kubw-router.yaml

apiVersion: v1
kind: ConfigMap
metadata:
name: kube-router-cfg
namespace: kube-system
labels:
tier: node
k8s-app: kube-router
data:
cni-conf.json: |
{
"name":"kubernetes",
"type":"bridge",
"bridge":"kube-bridge",
"isDefaultGateway":true,
"ipam": {
"type":"host-local"
}
}
---
apiVersion: extensions/v1beta1
kind: DaemonSet
metadata:
name: kube-router
namespace: kube-system
labels:
k8s-app: kube-router
spec:
template:
metadata:
labels:
k8s-app: kube-router
annotations:
scheduler.alpha.kubernetes.io/critical-pod: ''
spec:
containers:
- name: kube-router
image: cloudnativelabs/kube-router
args: ["--run-router=false", "--run-firewall=false", "--run-service-proxy=true", "--kubeconfig=/var/lib/kube-router/kubeconfig", "--masquerade-all", "--ipvs-sync-period=5s", "--iptables-sync-period=10s"]
securityContext:
privileged: true
imagePullPolicy: Always
env:
- name: NODE_NAME
valueFrom:
fieldRef:
fieldPath: spec.nodeName
volumeMounts:
- name: lib-modules
mountPath: /lib/modules
readOnly: true
- name: cni-conf-dir
mountPath: /etc/kubernetes/cni/net.d
- name: kubeconfig
mountPath: /var/lib/kube-router/kubeconfig
readOnly: true
- name: cert
mountPath: /etc/kubernetes/ssl
initContainers:
- name: install-cni
image: busybox
imagePullPolicy: Always
command:
- /bin/sh
- -c
- set -e -x;
if [ ! -f /etc/kubernetes/cni/net.d/10-kuberouter.conf ]; then
TMP=/etc/kubernetes/cni/net.d/.tmp-kuberouter-cfg;
cp /etc/kube-router/cni-conf.json ${TMP};
mv ${TMP} /etc/kubernetes/cni/net.d/10-kuberouter.conf;
fi
volumeMounts:
- name: cni-conf-dir
mountPath: /etc/kubernetes/cni/net.d
- name: kube-router-cfg
mountPath: /etc/kube-router
hostNetwork: true
nodeSelector:
kube: router
volumes:
- name: lib-modules
hostPath:
path: /lib/modules
- name: cni-conf-dir
hostPath:
path: /etc/kubernetes/cni/net.d
- name: kube-router-cfg
configMap:
name: kube-router-cfg
- name: kubeconfig
hostPath:
path: /var/lib/kube-router/kubeconfig
- name: cert
hostPath:
path: /etc/kubernetes/ssl

调整负载均衡的策略支持以下4种方式:

  • 最少连接数
kubectl annotate service my-service "kube-router.io/service.scheduler=lc"
  • 轮询
kubectl annotate service my-service "kube-router.io/service.scheduler=rr"
  • 源地址哈希
kubectl annotate service my-service "kube-router.io/service.scheduler=sh"
  • 目的地址哈希
kubectl annotate service my-service "kube-router.io/service.scheduler=dh"

作者:Magine1989

【版权声明】本文内容来自摩杜云社区用户原创、第三方投稿、转载,内容版权归原作者所有。本网站的目的在于传递更多信息,不拥有版权,亦不承担相应法律责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@moduyun.com

  1. 分享:
最后一次编辑于 2023年11月08日 0

暂无评论

推荐阅读
  UMG78UIvW0PY   2023年11月02日   60   0   0 域名解析jsongit
  xUOF0svV3LUK   2023年11月02日   61   0   0 递归jsonsed
  QL8BnSL91Ugt   2023年11月02日   49   0   0 IPhtmlciIPhtmlci
  7gZJoSEULaLm   2023年11月02日   49   0   0 端口号代理响应头json
  UMG78UIvW0PY   2023年11月12日   22   0   0 服务端端口号json
AJDqNpVvznez