V2EX = way to explore
V2EX 是一个关于分享和探索的地方
Sign Up Now
For Existing Member  Sign In
AkideLiu

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

  •  
  •   AkideLiu · Apr 14, 2021 · 2516 views
    This topic created in 1839 days ago, the information mentioned may be changed or developed.

    如何使用 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 replies    2021-04-15 11:03:22 +08:00
    kennylam777
        1
    kennylam777  
       Apr 14, 2021
    指定的 port: HostPort
    任意的 port: NodePort

    看看 ingress 的 service yaml 就學會
    mritd
        2
    mritd  
       Apr 15, 2021 via iPhone
    如果是开发环境可以完全将网络打通,CNI flannel(裸机 host-gw),然后上级路由 把 pod CIDR 抛任意一台主机即可,这样在外部就可以直接访问 pod ip 了
    jorneyr
        3
    jorneyr  
       Apr 15, 2021
    我们是使用网络插件,使得 Pod IP 可以外网访问。
    jk1030
        4
    jk1030  
       Apr 15, 2021
    NodePort 不行嘛
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   1066 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 97ms · UTC 22:52 · PVG 06:52 · LAX 15:52 · JFK 18:52
    ♥ Do have faith in what you're doing.