tke-extend-network-controller

module
v0.1.6 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Aug 9, 2024 License: Apache-2.0

README

tke-extend-network-controller

针对 TKE 集群一些特殊场景的的网络控制器。

API 参考

支持房间类场景

目前主要支持会议、游戏战斗服等房间类场景的网络,即要求每个 Pod 都需要独立的公网地址,TKE 集群默认只支持 EIP 方案,但 EIP 资源有限,不仅是数量的限制,还有每日申请的数量限制,稍微上点规模,或频繁扩缩容更换EIP,可能很容易触达限制导致 EIP 分配失败;而如果保留 EIP,在 EIP 没被绑定前,又会收取额外的闲置费。

TKE Pod 绑定 EIP 参考 VPC-CNI: Pod 直接绑定弹性公网 IP 使用说明超级节点 Pod 绑定 EIP

如果不用 EIP,也可通过安装此插件来实现为每个 Pod 的指定端口都分配一个独立的公网地址映射 (公网 IP:Port 到内网 Pod IP:Port 的映射)。

前提条件

安装 tke-extend-network-controller 前请确保满足以下前提条件:

  1. 创建了 TKE 集群,且集群版本大于等于 1.26。
  2. 集群中安装了 cert-manager (webhook 依赖证书)。
  3. 本地安装了 helm 命令,且能通过 helm 命令操作 TKE 集群(参考本地 Helm 客户端连接集群)。
  4. 需要一个腾讯云子账号的访问密钥(SecretID、SecretKey),参考子账号访问密钥管理,要求账号至少具有以下权限:
    {
        "version": "2.0",
        "statement": [
            {
                "effect": "allow",
                "action": [
                    "clb:DescribeLoadBalancerBackends",
                    "clb:DescribeLoadBalancerListeners",
                    "clb:DescribeLoadBalancers",
                    "clb:CreateLoadBalancer",
                    "clb:DescribeTargets",
                    "clb:DeleteLoadBalancer",
                    "clb:DeleteLoadBalancerListeners",
                    "clb:BatchDeregisterTargets",
                    "clb:BatchRegisterTargets",
                    "clb:DeregisterTargets",
                    "clb:CreateLoadBalancerListeners",
                    "clb:CreateListener",
                    "clb:RegisterTargets",
                    "clb:DeleteLoadBalancers",
                    "clb:DescribeLoadBalancersDetail"
                ],
                "resource": [
                    "*"
                ]
            }
        ]
    }
    

使用 helm 安装

  1. 添加 helm repo:
helm repo add tke-extend-network-controller https://imroc.github.io/tke-extend-network-controller
  1. 创建 values.yaml 并配置:
region: "" # TKE 集群所在地域,如 ap-guangzhou。全部地域列表参考: https://cloud.tencent.com/document/product/213/6091
vpcID: "" # TKE 集群所在 VPC ID (vpc-xxx)
clusterID: "" # TKE 集群 ID (cls-xxx)
secretID: "" # 腾讯云子账号的 SecretID
secretKey: "" # 腾讯云子账号的 SecretKey
  1. 安装到 TKE 集群:
helm upgrade --install -f values.yaml \
  --namespace tke-extend-network-controller --create-namespace \
  tke-extend-network-controller tke-extend-network-controller/tke-extend-network-controller

后续升级版本或更新配置时,都只需执行上面相同命令即可。

使用 CLB 为 Pod 分配公网地址映射

通过自动为 CLB 创建监听器并绑定单个 Pod 来实现为 Pod 分配独立的公网地址:

apiVersion: networking.cloud.tencent.com/v1apha1
kind: DedicatedCLBService
metadata:
  namespace: demo
  name: gameserver
spec:
  lbRegion: ap-chengdu # 可选,CLB 所在地域,默认为集群所在地域
  minPort: 501 # 在CLB自动创建监听器,每个Pod占用一个端口,端口号范围在 501-600
  maxPort: 600
  selector:
    app: gameserver
  ports:
  - protocol: TCP # CLB 监听器协议(TCP/UDP)
    targetPort: 9000 # 容器监听的端口
    addressPodAnnotation: networking.cloud.tencent.com/external-address-9000 # 可选,将外部地址注入到pod的annotation中
  - protocol: UDP
    targetPort: 8000
    addressPodAnnotation: networking.cloud.tencent.com/external-address-8080
  existedLbIds: # 如果复用已有的 CLB 实例,指定 CLB 实例 ID 的列表
    - lb-xxx
    - lb-yyy
    - lb-zzz
  # 暂未实现:extensiveParameters: '{"VipIsp":"CTCC"}' # 如果自动创建CLB,指定购买CLB接口的参数: https://cloud.tencent.com/document/product/214/30692

controller 会自动为关联的所有 Pod 自动创建 DedicatedCLBListener:

apiVersion: networking.cloud.tencent.com/v1alpha1
kind: DedicatedCLBListener
metadata:
  name: gameserver-0
spec:
  lbId: lb-xxx # 必选,CLB 的实例 ID
  lbRegion: ap-chengdu # 可选,CLB 所在地域,默认为集群所在地域
  lbPort: 8088 # 必选,监听器端口
  protocol: TCP # 必选,监听器协议。TCP | UDP
  listenerConfig: clblistenerconfig-sample # 可选,创建监听器的配置
  backendPod: # 可选,需绑定的后端Pod
    podName: gameserver-0 # 指定 backendPod 时必选,后端 Pod 名称
    port: 80 # 指定 backendPod 时必选,后端 Pod 监听的端口
status:
  listenerId: lbl-ku486mr3 # 监听器 ID
  state: Bound # 监听器状态,Pending (监听器创建中) | Bound (监听器已绑定Pod) | Available (监听器已创建但还未绑定Pod) | Deleting (监听器删除中)
  address: 139.135.64.53:8088 # 公网地址

然后 controller 根据 DedicatedCLBListener 进行对账,自动将 Pod 绑定到对应的 CLB 监听器上。

使用 NAT 网关为 Pod 分配公网地址映射

TODO

Directories

Path Synopsis
api
cmd
app
internal
pkg
clb
test

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL