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

2021-04-14 22:50:26 +08:00
 AkideLiu

如何使用 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

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

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

1943 次点击
所在节点    Kubernetes
4 条回复
kennylam777
2021-04-14 23:39:48 +08:00
指定的 port: HostPort
任意的 port: NodePort

看看 ingress 的 service yaml 就學會
mritd
2021-04-15 08:19:39 +08:00
如果是开发环境可以完全将网络打通,CNI flannel(裸机 host-gw),然后上级路由 把 pod CIDR 抛任意一台主机即可,这样在外部就可以直接访问 pod ip 了
jorneyr
2021-04-15 09:26:05 +08:00
我们是使用网络插件,使得 Pod IP 可以外网访问。
jk1030
2021-04-15 11:03:22 +08:00
NodePort 不行嘛

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/770712

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX