公众号关注 「奇妙的 Linux 世界」
设为「星标」,每天带你玩转 Linux !

k3s集群私有负载均衡的另一种选择tailscale
在阅读此文实践前需要阅读 多云组网部署 k3s 集群的另一种选择Tailscale [1]
要求
• 基于tailscale实现k3s集群部署
• 有私有负载均衡场景
• 已经安装helm
本文默认已经满足上述条件了。
历史选择
在tailscale之前,我是利用MetalLB[2]实现负载均衡的,然后再由tailscale某个节点广播负载均衡路由的。
如今
在tailscale v1.50版本之后,增强了对k8s的支持,Kubernetes operator[3]诞生了,带来了很多新功能:
• 代理访问k8s控制平面API
• 向k8s集群公开内部服务/k8s集群服务暴露给内部(集群内部和集群外部互通有无,甚至是跨集群互通)
• 打通saas云服务
• 在 Kubernetes 上部署出口节点和子网路由控制器
其中2、4比较我用的比较多
安装部署
准备工作
1. 编辑ACL策略[4], 新增如下配置
"tagOwners": {
"tag:k8s-operator": [],
"tag:k8s": ["tag:k8s-operator"],
},
1. 创建Oauth客户端[5]备用, 选择
Devices读写权限,并绑定tag:k8s-operator
点击创建后,会弹出Client ID和Client secret 记得留存一下,只会显示一次,后续步骤会使用
安装
1. 添加到本地 Helm 存储库:
https://pkgs.tailscale.com/helmcharts
helm repo add tailscale https://pkgs.tailscale.com/helmcharts
1. 更新
helm repo update
1. 安装
helm upgrade \
--install \
tailscale-operator \
tailscale/tailscale-operator \
--namespace=tailscale \
--create-namespace \
--set-string oauth.clientId=<OAauth Client ID> \
--set-string oauth.clientSecret=<OAuth Client secret> \
--set-string operatorConfig.image.repository=ccr.ccs.tencentyun.com/k7scn/tailscale-k8s-operator \
--set-string proxyConfig.image.repository=ccr.ccs.tencentyun.com/k7scn/tailscale \
--wait
如果你的环境拉取镜像没问题的话,关于镜像部分可以去掉, 目前最新版本是v1.68.1
operatorConfig.image.repository=ccr.ccs.tencentyun.com/k7scn/tailscale-k8s-operator
ccr.ccs.tencentyun.com/k7scn/tailscale
1. 验证
等pod状态变成ok之后,可以在tailscale控制台机器里看到tailscale-operator节点,类似
使用
这里主要介绍svc负载均衡模式(即ingress模式)和svc子网路由配置,其他可以参考官网文档
负载均衡
其实这里最好的演示是nginx-ingress-controller, 但是bitnami的nginx-ingress-controller不支持这个参数
默认已经安装好了nginx-ingress-controller,这里我手动配置一下。
apiVersion: v1
kind: Service
metadata:
annotations:
meta.helm.sh/release-name: nginx-ingress-controller
meta.helm.sh/release-namespace: kube-system
labels:
app.kubernetes.io/component: controller
app.kubernetes.io/instance: nginx-ingress-controller
app.kubernetes.io/managed-by: Helm
app.kubernetes.io/name: nginx-ingress-controller
app.kubernetes.io/version: 1.10.1
helm.sh/chart: nginx-ingress-controller-11.3.8
name: nginx-ingress-controller-lb
namespace: kube-system
spec:
ports:
- name: http
port: 80
protocol: TCP
targetPort: http
- name: https
port: 443
protocol: TCP
targetPort: https
selector:
app.kubernetes.io/component: controller
app.kubernetes.io/instance: nginx-ingress-controller
app.kubernetes.io/name: nginx-ingress-controller
sessionAffinity: None
type: LoadBalancer
loadBalancerClass: tailscale
手动配置loadBalancerClass值为tailscale
apply生效后,查看kubectl get svc -n kube-system
查看tailscale命令空间
当然除了这种方式外还可以给Service添加注解来支持暴露,更多详细请阅读官方文档Expose a Kubernetes cluster workload to your tailnet (cluster ingress)[6]
子网路由
之前说到,基于tailscale组网,会自动分发pod的路由,使你在任何时间任何地点都可以访问pod的ip,那如何实现访问svc的ip呢?
之前尝试过,在k8s节点分发额外分发svc的ip, 会导致经常性网络问题,不知道大家有没有遇到类似问题?
其他配置也比较简单, 示例10.25.0.0/16"是我的集群svc的cidr
apiVersion: tailscale.com/v1alpha1
kind: Connector
metadata:
name: ts-svc-cidrs
namespace: tailscale
spec:
hostname: ts-svc-cidrs
subnetRouter:
advertiseRoutes:
- "10.25.0.0/16"
等pod状态ok,需要控制台allow一下(记得不是特别清楚是否需要可以确定一下)
在此之后,你也可以实现任何时间任何地点都可以访问svc的ip了。如图是我本地测试,大家有没有发现不一样的地方😂
总结
到这里 tailscale 在 k8s 上常用技能点就点完了,如果有其他感兴趣的,可以留言。
引用链接
[1] 多云组网部署 k3s 集群的另一种选择Tailscale : https://ysicing.me/k3s-tailscale[2] MetalLB: https://github.com/bitnami/charts/tree/main/bitnami/metallb[3] Kubernetes operator: https://tailscale.com/kb/1236/kubernetes-operator?q=k8s[4] ACL策略: https://login.tailscale.com/admin/acls/file[5] Oauth客户端: https://login.tailscale.com/admin/settings/oauth[6] Expose a Kubernetes cluster workload to your tailnet (cluster ingress): https://tailscale.com/kb/1439/kubernetes-operator-cluster-ingress
本文转载自:「缘生小助手」,原文:https://url.hi-linux.com/IJDG5,版权归原作者所有。欢迎投稿,投稿邮箱: editor@hi-linux.com。

🚀 最近,我们建立了一个技术交流微信群。目前群里已加入了不少行业内的大神,有兴趣的同学可以加入和我们一起交流技术,在 「奇妙的 Linux 世界」 公众号直接回复 「加群」 邀请你入群。
🌟『极客视界』科技达人必备综合资讯指南,等你来探索!访问网址 https://bestgeek.org 即可打开新世界。
📕 关注『奇妙的 Linux 世界』公众号,带你开启有趣新生活!更多好用好玩的软件资源,可访问 https://666666.dev 免费获取。

你可能还喜欢
点击下方图片即可阅读
『IT 人必备工具箱』一份属于你的数字宝藏,期待你的支持!
点击上方图片,『美团|饿了么』外卖红包天天免费领

更多有趣的互联网新鲜事,关注「奇妙的互联网」视频号全了解!


348




被折叠的 条评论
为什么被折叠?



