logo NodeSeekbeta

[分享】使用k3s 和 tailscale 在甲骨文云和家之间搭建 kubernetes集群

1234
  • 搭K8s实现隧道服务 厉害

  • 我之前也尝试过类似的跨区域集群,docker swarm over tailscale,不同区域之间的节点通讯延时比较高导致资源调度经常失败,然后就放弃了。k8s搭建跨区域集群不会有资源调度超时的问题吗?

  • @Awhile3254 #12 我的做法是尽量通过配置 nodeSelector 以及 affinity 让区域相近的Pod在一起减少跨区通信。
    我不确定你那里延迟高在哪个地方。但是我猜可能出在 家里到tailscale 中继这一段。因为 tailscale 在国内没有中继,所以从家里连到国外的 tailscale 中继可能比较慢,我的做法是将这一段的流量交给自己的翻墙节点去代理(路由器的 openclash),或者你可以自己部署 DERP server

    最大的问题目前感觉是 dns查询比较慢,目前发现 k3s 自带的 coredns pod 必须部属 server节点,放在worker节点启动不了。这导致一个问题,集群内所有的dns查询都要不远万里先经过家里的 coredns,所以延迟不是特别稳定。。。

  • @Refinery7516 #13 集群机器在甲骨文大阪和racknerd 美西,两边连起来延迟有一百毫秒,用不了。

  • 我是在安装服务器的时候指定--flannel-iface tailscale0来组件的。

  • @Refinery7516 #8 发布于2023/9/24 11:34:32
    @ikeep #7 ,这里做了优化,默认traefik运行在master,所以流量路径就是 worker(甲骨文) -> master(家) -> worker (甲骨文),延迟不是特别稳定。 200ms-10s都有。通过修改配置让 traefik 运行直接在甲骨文上面,现在延迟在1秒以内(从家里访问)

    下图是将traefik从家里放在甲骨文上面后的效果。

    我在安装的时候就禁掉了traefik和servicelb
    后面手动部署traefik

  • @guigeng #16 是的,我后面也打算这么弄。k3s 默认的设置不适合跨区集群。还是让每个node单独一个反代比较快

  • @Refinery7516 #17
    我好奇的是,你翻墙节点是不是部署在k3s agent上

    我之前的做法是部署vless+reality的stateful
    然后traefik tcp反代到各个节点,配合脚本(脚本做cf dns解析、建route、删除route),每个域名对应到每个node->pod
    这样比如a域名就不会串到node b去,确保a域名解析到node a,pod a在node a上

  • @guigeng #18

    可以,我用ds host方式的,很完美。

    apiVersion: apps/v1
    kind: DaemonSet
    metadata:
      name: xray
      labels:
        app: xray
    spec:
      selector:
        matchLabels:
          app: xray
      template:
        metadata:
          labels:
            app: xray
        spec:
          hostNetwork: true
          nodeSelector:
            node-role.kubernetes.io/nogfw: "true"
          tolerations:
          - operator: Exists
            effect: NoSchedule
          containers:
          - name: xray
            image: ttl.sh/nogfw/xray:5m
            imagePullPolicy: Always
            ports:
            - containerPort: 6666
              protocol: TCP
            - containerPort: 6666
              protocol: UDP
    
  • @songshi #19 发布于2023/10/11 12:02:13
    @guigeng #18

    可以,我用ds host方式的,很完美。

    apiVersion: apps/v1
    kind: DaemonSet
    metadata:
      name: xray
      labels:
        app: xray
    spec:
      selector:
        matchLabels:
          app: xray
      template:
        metadata:
          labels:
            app: xray
        spec:
          hostNetwork: true
          nodeSelector:
            node-role.kubernetes.io/nogfw: "true"
          tolerations:
          - operator: Exists
            effect: NoSchedule
          containers:
          - name: xray
            image: ttl.sh/nogfw/xray:5m
            imagePullPolicy: Always
            ports:
            - containerPort: 6666
              protocol: TCP
            - containerPort: 6666
              protocol: UDP
    

    如果要用443端口就麻烦啊

    还有个问题,证书怎么解决的?cert-manager更新完证书后pod没更新

1234

你好啊,陌生人!

我的朋友,看起来你是新来的,如果想参与到讨论中,点击下面的按钮!

📈用户数目📈

目前论坛共有72269位seeker

🎉欢迎新用户🎉