Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[feat] Add new networkType named AlibabaCloud-Multi-NLBs #184

Open
chrisliu1995 opened this issue Nov 14, 2024 · 1 comment
Open

[feat] Add new networkType named AlibabaCloud-Multi-NLBs #184

chrisliu1995 opened this issue Nov 14, 2024 · 1 comment

Comments

@chrisliu1995
Copy link
Member

需求背景

在游戏场景,往往有多线接入的需求,即通过两个或两个以上的运营商带宽接入,实现玩家跨运营商快速访问游戏服的目的。

此时,单个游戏服需要多个接入端点,每个接入端点绑定独立运营商的公网IP。

设计

示意图

image

参数名称

AlibabaCloud-Multi-NLBs

参数设计

NlbIdNames

含义:填写nlb的id以及对应名称。可填写多个。
填写格式:{nlb-id-0}/{name-0},{nlb-id-1}/{name-1}。例如:nlb-ji8l844c0qzii1x6mc/DianXin,nlb-26jbknebrjlejt5abu/LianTong,...
是否支持变更:不支持

PortProtocols

含义:pod暴露的端口及协议,支持填写多个端口/协议
格式:port1/protocol1,port2/protocol2,...(协议需大写)
是否支持变更:支持

Fixed

含义:是否固定访问IP/端口。若是,即使pod删除重建,网络内外映射关系不会改变
填写格式:false / true
是否支持变更:支持

AllowNotReadyContainers

含义:在容器原地升级时允许不断流的对应容器名称,可填写多个
格式:{containerName_0},{containerName_1},... 例如:sidecar
是否支持变更:在原地升级过程中不可变更。

LBHealthCheckFlag

含义:是否开启健康检查
格式:“on”代表开启,“off”代表关闭。默认为on
是否支持变更:支持

LBHealthCheckType

含义:健康检查协议
格式:填写 “tcp” 或者 “http”,默认为tcp
是否支持变更:支持

LBHealthCheckConnectPort

含义:健康检查的服务器端口。
格式:取值范围[0, 65535]。默认值为“0”
是否支持变更:支持

LBHealthCheckConnectTimeout

含义:健康检查响应的最大超时时间。
格式:单位:秒。取值范围[1, 300]。默认值为“5”
是否支持变更:支持

LBHealthyThreshold

含义:健康检查连续成功多少次后,将服务器的健康检查状态由失败判定为成功。
格式:取值范围[2, 10]。默认值为“2”
是否支持变更:支持

LBUnhealthyThreshold

含义:健康检查连续失败多少次后,将服务器的健康检查状态由成功判定为失败。
格式:取值范围[2, 10]。默认值为“2”
是否支持变更:支持

LBHealthCheckInterval

含义:健康检查的时间间隔。
格式:单位:秒。取值范围[1, 50]。默认值为“10”
是否支持变更:支持
LBHealthCheckUri

含义:健康检查类型为HTTP时对应的检查路径。
格式:长度为1~80个字符,只能使用字母、数字、字符。 必须以正斜线(/)开头。
是否支持变更:支持

LBHealthCheckDomain

含义:健康检查类型为HTTP时对应的域名。
格式:特定域名长度限制1~80个字符,只能使用小写字母、数字、短划线(-)、半角句号(.)。
是否支持变更:支持

LBHealthCheckMethod

含义:健康检查类型为HTTP时对应的方法。
格式:“GET” 或者 “HEAD”
是否支持变更:支持

使用示例

部署的Gss:

cat <<EOF | kubectl apply -f -
apiVersion: game.kruise.io/v1alpha1
kind: GameServerSet
metadata:
  name: multi-nlbs
  namespace: default
spec:
  replicas: 2
  updateStrategy:
    rollingUpdate:
      podUpdatePolicy: InPlaceIfPossible
  network:
    networkConf:
    - name: NlbIdNames
      value: nlb-ji8l844c0qzii1x6mc/DianXin,nlb-26jbknebrjlejt5abu/LianTong,nlb-qi8lz598c0qzks1x6p2/YiDong
    - name: PortProtocols
      value: "8888/UDP"
    networkType: AlibabaCloud-Multi-NLBs
  gameServerTemplate:
    spec:
      containers:
        - image: registry.cn-hangzhou.aliyuncs.com/gs-demo/gameserver:network
          name: gameserver
EOF

生成的GameServer:

  networkStatus:
    createTime: "2024-10-28T12:41:56Z"
    currentNetworkState: Ready
    desiredNetworkState: Ready
    externalAddresses:
    - endPoint: nlb-xxx0.cn.nlb.aliyuncs.com/DianXin,nlb-xxx1.cn.nlb.aliyuncs.com/LianTong,nlb-xxx2.cn.nlb.aliyuncs.com/YiDong
      ip: ""
      ports:
      - name: "8888"
        port: 1047
        protocol: UDP
    internalAddresses:
    - ip: 172.16.0.1
      ports:
      - name: "8888"
        port: 8888
        protocol: UDP
    lastTransitionTime: "2024-10-28T12:41:56Z"
    networkType: AlibabaCloud-Multi-NLBs
@chrisliu1995
Copy link
Member Author

chrisliu1995 commented Dec 6, 2024

当nlb实例监听数量将达上限,可再扩展在NlbIdNames结尾继续填入新的nlb id并关联上对应Name。要注意每个name的nlb数量需要相等,否则会报错,无法生效。如下示例,扩展后,DianXin、LianTong、YiDong的nlb数量都为2个。

cat <<EOF | kubectl apply -f -
apiVersion: game.kruise.io/v1alpha1
kind: GameServerSet
metadata:
  name: multi-nlbs
  namespace: default
spec:
  replicas: 2
  updateStrategy:
    rollingUpdate:
      podUpdatePolicy: InPlaceIfPossible
  network:
    networkConf:
    - name: NlbIdNames
      value: nlb-ji8l844c0qzii1x6mc/DianXin,nlb-26jbknebrjlejt5abu/LianTong,nlb-qi8lz598c0qzks1x6p2/YiDong,nlb-ji8l844c0qzii1x999/DianXin,nlb-26jbknebrjlejt5888/LianTong,nlb-qi8lz598c0qzks1x777/YiDong
    - name: PortProtocols
      value: "8888/UDP"
    networkType: AlibabaCloud-Multi-NLBs
  gameServerTemplate:
    spec:
      containers:
        - image: registry.cn-hangzhou.aliyuncs.com/gs-demo/gameserver:network
          name: gameserver
EOF

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant