logo NodeSeekbeta

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

1234
  • @guigeng #20

    我这个镜像是通过CI生成的,定时更新镜像和订阅啥的,靠中转去拉的,直接ss协议的。

    至于证书问题,这个可能需要自己定制镜像呢,镜像里处理。gitops,证书就放到代码里了,泛域名证书。

  • @guigeng #18 我的翻墙节点有两个 ,主节点通过docker compose 部署的,方案是 v2ray + WebSocket+TLS+Web. 用的搬瓦工 46刀日本机器。这台机器内存也比较小就没放到集群里面。

    备用节点以防万一用的,确实部署在k3s集群里面(不在家-日本这个集群,而是在一个美国的集群里面)。部署内容大概这个样子

    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: v2ray-nginx-deployment
    spec:
      selector:
        matchLabels:
          app: v2ray-nginx-deployment
      template:
        metadata:
          labels:
            app: v2ray-nginx-deployment
        spec:
          nodeSelector:
            kubernetes.io/hostname: hytron92863896
          containers:
            - env:
                - name: TZ
                  value: Asia/Shanghai
              image: v2fly/v2fly-core
              name: v2ray
              args: ["run", "-c", "/etc/v2ray/v2ray.json"]
              ports:
                - containerPort: 10000
              volumeMounts:
                - name: v2ray-config
                  mountPath: /etc/v2ray
    
          restartPolicy: Always
          volumes:
            - name: v2ray-config
              configMap:
                name: v2ray-config-file
    
    
    ---
    apiVersion: v1
    kind: Service
    metadata:
      name: v2ray-nginx-service
    spec:
      ports:
        - name: "web"
          port: 80
          targetPort: 10000
      selector:
        app: v2ray-nginx-deployment
    
    ---
    apiVersion: networking.k8s.io/v1
    kind: Ingress
    metadata:
      name: nginx-ingress
      annotations:
        traefik.ingress.kubernetes.io/router.entrypoints: websecure
        traefik.ingress.kubernetes.io/router.tls: 'true'
        traefik.ingress.kubernetes.io/router.tls.certresolver: lets-encr
    spec:
      rules:
        - host: xxxxxx.tomyail.com
          http:
            paths:
              - path: "/"
                pathType: Prefix
                backend:
                  service:
                    name: v2ray-nginx-service
                    port:
                      number: 80
    
    

    通过 nodeSelector 指定了哪台机器作为 翻墙节点,美国的机器都有公网ip,所以ingress暴露出来的ip选出 hytron92863896的 ip绑定到cloudflare 然后访问的。

    目前使用下来将翻墙节点放在集群里面最大的问题还是dns查询慢,因为如果没有修改过coredns配置,默认集群里面的的dns server 应该是 10.43.0.10。外部代理向 v2ray 的dns查询最终都会流向 10.43.0.10这个 ip,如果 这个ip 的pod 在v2ray不在同一台机器,就会增加不必要的dns查询延迟。当然 k3s 也能禁用 coredns 或者对它做一些配置,不过目前这方面还没做过研究~~

  • @songshi #19 原来还有个 hostNetwork属性,赞,后面有空试试

  • @songshi #21 发布于2023/10/11 12:15:09
    @guigeng #20

    我这个镜像是通过CI生成的,定时更新镜像和订阅啥的,靠中转去拉的,直接ss协议的。

    至于证书问题,这个可能需要自己定制镜像呢,镜像里处理。gitops,证书就放到代码里了,泛域名证书。

    证书放在镜像我还没想好怎么搞
    不过最近k3s崩了,没折腾,现在是docker compose跑的

  • @Refinery7516 #23 发布于2023/10/11 12:30:32
    @songshi #19 原来还有个 hostNetwork属性,赞,后面有空试试

    hostnetwork只能非80 443端口用

  • @Refinery7516 #22 发布于2023/10/11 12:26:41
    @guigeng #18 我的翻墙节点有两个 ,主节点通过docker compose 部署的,方案是 v2ray + WebSocket+TLS+Web. 用的搬瓦工 46刀日本机器。这台机器内存也比较小就没放到集群里面。

    备用节点以防万一用的,确实部署在k3s集群里面(不在家-日本这个集群,而是在一个美国的集群里面)。部署内容大概这个样子

    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: v2ray-nginx-deployment
    spec:
      selector:
        matchLabels:
          app: v2ray-nginx-deployment
      template:
        metadata:
          labels:
            app: v2ray-nginx-deployment
        spec:
          nodeSelector:
            kubernetes.io/hostname: hytron92863896
          containers:
            - env:
                - name: TZ
                  value: Asia/Shanghai
              image: v2fly/v2fly-core
              name: v2ray
              args: ["run", "-c", "/etc/v2ray/v2ray.json"]
              ports:
                - containerPort: 10000
              volumeMounts:
                - name: v2ray-config
                  mountPath: /etc/v2ray
    
          restartPolicy: Always
          volumes:
            - name: v2ray-config
              configMap:
                name: v2ray-config-file
    
    
    ---
    apiVersion: v1
    kind: Service
    metadata:
      name: v2ray-nginx-service
    spec:
      ports:
        - name: "web"
          port: 80
          targetPort: 10000
      selector:
        app: v2ray-nginx-deployment
    
    ---
    apiVersion: networking.k8s.io/v1
    kind: Ingress
    metadata:
      name: nginx-ingress
      annotations:
        traefik.ingress.kubernetes.io/router.entrypoints: websecure
        traefik.ingress.kubernetes.io/router.tls: 'true'
        traefik.ingress.kubernetes.io/router.tls.certresolver: lets-encr
    spec:
      rules:
        - host: xxxxxx.tomyail.com
          http:
            paths:
              - path: "/"
                pathType: Prefix
                backend:
                  service:
                    name: v2ray-nginx-service
                    port:
                      number: 80
    
    

    通过 nodeSelector 指定了哪台机器作为 翻墙节点,美国的机器都有公网ip,所以ingress暴露出来的ip选出 hytron92863896的 ip绑定到cloudflare 然后访问的。

    目前使用下来将翻墙节点放在集群里面最大的问题还是dns查询慢,因为如果没有修改过coredns配置,默认集群里面的的dns server 应该是 10.43.0.10。外部代理向 v2ray 的dns查询最终都会流向 10.43.0.10这个 ip,如果 这个ip 的pod 在v2ray不在同一台机器,就会增加不必要的dns查询延迟。当然 k3s 也能禁用 coredns 或者对它做一些配置,不过目前这方面还没做过研究~~

    我用的sing-box

  • @Refinery7516 #22

    不要用集群dns,用自己的dns或者宿主机dns。集群的dns取决于你的coredns pod所在节点dns

  • @guigeng #26

    没太整明白sing-box😂,简单搞了

  • 好厉害,插个眼。

  • @songshi #27 好的,学到了

1234

你好啊,陌生人!

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

📈用户数目📈

目前论坛共有72269位seeker

🎉欢迎新用户🎉