如何使用 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 就是根据需求打开端口
复现过程:
我想请教请教这个过程是如何实现的?
ps:感觉是使用了什么神奇的 ingress controller,不知道有没有开源产品
1
kennylam777 2021-04-14 23:39:48 +08:00
指定的 port: HostPort
任意的 port: NodePort 看看 ingress 的 service yaml 就學會 |
2
mritd 2021-04-15 08:19:39 +08:00 via iPhone
如果是开发环境可以完全将网络打通,CNI flannel(裸机 host-gw),然后上级路由 把 pod CIDR 抛任意一台主机即可,这样在外部就可以直接访问 pod ip 了
|
3
jorneyr 2021-04-15 09:26:05 +08:00
我们是使用网络插件,使得 Pod IP 可以外网访问。
|
4
jk1030 2021-04-15 11:03:22 +08:00
NodePort 不行嘛
|