开发机对外暴露服务

开发机对外暴露服务,推荐 2 种方式:

  • SSH 隧道转发
  • 公网 IP

前者适合轻量级实验验证,后者更适合部署稳定的生产级服务。

配置 SSH 隧道转发

SSH 隧道转发原理,是通过在用户的本地 pc 启动一个 SSH 转发代理,从而实现将发往本地 pc 的请求,通过 SSH 隧道转发至远端开发机,举例如下:

# 在开发机内,启动一个http服务,监听端口8000,监听所有ip
python3 -m http.server 8000 --bind 0.0.0.0
# 启动转发代理,将远端的 8000 端口通过隧道映射到本地的 9000 端口(若是需要启动到后台,增加 -f 参数)
ssh -p 3xxxx -L 9000:127.0.0.1:8000 root@ssh-cn-huabei1.ebcloud.com -N 
# 本地访问,请求9000端口
curl 127.0.0.1:9000

# 或者浏览器打开:
http://127.0.0.1:9000/

注意:

  • 查看开发机的 SSH 访问地址及密码,参考这里

配置公网 IP

为开发机配置公网 IP 您需要通过 kubectl 命令进行操作,关于 kubectl 工具,具体参考这里

注意:

  • 本文档仅限于为开发机(ContainerServer)配置公网 IP,为普通 K8S 工作负载配置公网 IP,请参考这里
申请公网 IP

通过命令:kubectl -n <namesapce> edit containerserver {containerserver-name},修改如下部分:

...
spec:
...
  network:
    public: true  # 开启公网IP
    tcp:
      ports:      # 对外暴露的端口
      - 80
      - 443

注意:

  • 关机不会取消已分配的公网 IP,如您不需要使用公网 IP,请及时关闭。
  • 关闭公网 IP 重新申请,可能会改变您的公网 IP。
  • 完整的 ContainerServer CR 的示例及字段解释,参考这里
查看申请到的公网 IP

命令:kubectl -n <namesapce> get containerserver <containerserverName> -owide 输出的信息中,EXTERNAL-IP 即为申请到的公网IP

NAME    STATUS     AGE   ENABLE-DOCKER   SERVER-POD     SSH-ACCESS                                     EXTERNAL-IP   SERVER-CLUSTER-IP   DIND-CLUSTER-IP
test    Poweroff   1d    false           cs-xxx-server  ssh -p 37630 root@ssh-cn-huabei1.ebcloud.com   61.135.x.x    10.233.24.1         10.233.24.2
关闭公网 IP

通过命令:kubectl -n <namesapce> edit containerserver {containerserver-name}

network -> public改为false,可以关闭公网 IP,如下所示。

...
spec:
...
  network:
    public: false  # 关闭公网 IP
    tcp:
      ports:       # 关闭公网 IP 时,这部分可以保留,用于下次开启使用
      - 80
      - 443