如何使用 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 就是根据需求打开端口
复现过程:
- 使用 gitpod 打开 express demo http://gitpod.io/#/https://github.com/jatins/express-hello-world
- 修改 express default port to 3006
- gitpod 会添加一个暴露 3006

我想请教请教这个过程是如何实现的?
ps:感觉是使用了什么神奇的 ingress controller,不知道有没有开源产品