V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
AkideLiu
V2EX  ›  Kubernetes

如何使用 k8s 对外暴露 pods 的任意端口?

  •  
  •   AkideLiu · 2021-04-14 22:50:26 +08:00 · 1944 次点击
    这是一个创建于 1352 天前的主题,其中的信息可能已经有所发展或是发生改变。

    如何使用 k8s 在 对外暴露 pods 的任意端口?

    现在想实现使用 self host kubernetes 的code-server进行 web preview,现在的用法是使用 yaml 文件里面写 services 和 ingress 进行暴露,但是 ports 是写死的,如果要打开新的端口就需要重新修改 ymal 。搜了半天也没找到办法,希望 v2 的大佬们指点一下。

    example yaml:

    ---
    apiVersion: networking.k8s.io/v1beta1
    kind: Ingress
    metadata:
      name: code-server-01
      namespace: code-server-01
      annotations:
        kubernetes.io/ingress.class: nginx
    spec:
    # 内网
      rules:
      - host: code-server-01.xxxxxxx.xip.io
        http:
          paths:
          - backend:
              serviceName: code-server-01
              servicePort: 80
      - host: preview-code-server-01.xxxxxxx.xip.io
        http:
          paths:
          - backend:
              serviceName: code-server-01
              servicePort: 5500
              
     # 外网
      - host: code-01.xxx.com
        http:
          paths:
          - backend:
              serviceName: code-server-01
              servicePort: 80
    
      - host: preview-code-01.xxx.com
        http:
          paths:
          - backend:
              serviceName: code-server-01
              servicePort: 5500
    ---
    apiVersion: v1
    kind: Service
    metadata:
     name: code-server-01
     namespace: code-server-01
    spec:
     ports:
     - port: 80
       name: web
       targetPort: 8080
     - port: 5500
       name: preview
       targetPort: 5500
     selector:
       app: code-server-01
    

    期望实现:

    比如说 gitpod.io 的 preview 就是根据需求打开端口

    复现过程:

    1. 使用 gitpod 打开 express demo http://gitpod.io/#/https://github.com/jatins/express-hello-world
    2. 修改 express default port to 3006
    3. gitpod 会添加一个暴露 3006

    2021-04-15_00-10-02

    我想请教请教这个过程是如何实现的?

    ps:感觉是使用了什么神奇的 ingress controller,不知道有没有开源产品

    4 条回复    2021-04-15 11:03:22 +08:00
    kennylam777
        1
    kennylam777  
       2021-04-14 23:39:48 +08:00
    指定的 port: HostPort
    任意的 port: NodePort

    看看 ingress 的 service yaml 就學會
    mritd
        2
    mritd  
       2021-04-15 08:19:39 +08:00 via iPhone
    如果是开发环境可以完全将网络打通,CNI flannel(裸机 host-gw),然后上级路由 把 pod CIDR 抛任意一台主机即可,这样在外部就可以直接访问 pod ip 了
    jorneyr
        3
    jorneyr  
       2021-04-15 09:26:05 +08:00
    我们是使用网络插件,使得 Pod IP 可以外网访问。
    jk1030
        4
    jk1030  
       2021-04-15 11:03:22 +08:00
    NodePort 不行嘛
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1258 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 17:54 · PVG 01:54 · LAX 09:54 · JFK 12:54
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.