- 我在 Mac OS 上使用与 docker 捆绑的本地 kubernetes。
- 我已经安装了nginx-ingress-controller。
- 我设法通过入口向我的 kubernetes 托管容器(例如,从我的本地浏览器)发送外部 http请求。所有请求都通过 nginx 端口 80 或 443 发送。
问题是,我只能通过我的 ngnix 控制器路由 http 或 https 请求。如何通过入口向我的容器发送非 HTTP 请求(例如数据库或 corba)?
问题是,我只能通过我的 ngnix 控制器路由 http 或 https 请求。如何通过入口向我的容器发送非 HTTP 请求(例如数据库或 corba)?
这没有通过入口机制得到很好的支持,并且是一个未解决的问题。
有一个使用 nginx-ingress 的 tcp 或 udp 流量的解决方法,它将使用 configmap 将暴露的端口映射到 kubernetes 服务。
请参阅此文档。
tcp-services-configmap
使用(and/or udp-services-configmap
) 参数 启动入口控制器。
args:
- "/nginx-ingress-controller"
- "--tcp-services-configmap=default/nginx-tcp-configmap"
- "--v=2"
部署配置图:
apiVersion: v1
kind: ConfigMap
metadata:
name: nginx-tcp-configmap
data:
9000: "default/example-service:8080"
9000
暴露端口在哪里8080
,服务端口在哪里
我在裸机服务器上使用 nginx-ingress-controller。为了从所有节点访问托管站点,我将其创建为 DaemonSet 而不是部署(裸机注意事项)。
该解决方案运行良好,并且完美集成了 Ingress 规范的更新。
为了使 TS 服务器可用,我更改了 nginx-ingress-controller.yml 中 Pod 的参数,如 stacksonstacks 所述:
/nginx-ingress-controller
--configmap=$(POD_NAMESPACE)/nginx-configuration
--publish-service=$(POD_NAMESPACE)/ingress-nginx
--annotations-prefix=nginx.ingress.kubernetes.io
--tcp-services-configmap=default/tcp-ingress-configmap
--udp-services-configmap=default/udp-ingress-configmap
不幸的是,当应用更改后的规范时,DaemonSet 并没有自动重新创建 Pod,所以在检查 Pod 时,我仍然有旧的 args:
/nginx-ingress-controller
--configmap=$(POD_NAMESPACE)/nginx-configuration
--publish-service=$(POD_NAMESPACE)/ingress-nginx
--annotations-prefix=nginx.ingress.kubernetes.io
删除 ingress-nginx 命名空间中的 Pod,kubectl --namespace ingress-nginx delete pod --all
使控制器创建新的 Pod,最后端口在主机网络上可用。
我知道情况可能会有所不同,但希望有人可以为此节省几分钟。
(其中一条评论谈到了 Helm)。
对于那些使用ingress-nginx helm chart的人- 大部分配置已经完成。
您只需要转到相关的协议部分(tcp或udp)并在其下添加相关的端口和服务 url。
例如:
tcp:
8080: "default/example-tcp-svc:9000"