Kubernetes:通过Ingress将非HTTP请求路由到容器

Mat*_*s M 8 kubernetes kubernetes-ingress

  1. 我在Mac OS上使用捆绑了docker的本地kubernetes.
  2. 我已经安装了nginx-ingress-controller.
  3. 通过ingress将外部http 请求发送到我的kubernetes托管容器(例如从我的本地浏览器).所有请求都通过nginx端口80或443发送.

问题是,我只能通过我的ngnix控制器路由http或https请求.如何通过入口向我的容器发送非HTTP请求(例如数据库或corba)?

sta*_*cks 13

这通过入口机制得不到很好的支持,并且是一个悬而未决的问题.
使用nginx-ingress可以解决tcp或udp流量问题,它会使用configmap将暴露的端口映射到kubernetes服务.
看到这个文档.

使用tcp-services-configmap(和/或udp-services-configmap)参数启动入口控制器.

args: 
- "/nginx-ingress-controller"
- "--tcp-services-configmap=default/nginx-tcp-configmap"
- "--v=2"
Run Code Online (Sandbox Code Playgroud)

部署configmap:

apiVersion: v1
kind: ConfigMap
metadata:
  name: nginx-tcp-configmap
data:
  9000: "default/example-service:8080"
Run Code Online (Sandbox Code Playgroud)

9000暴露端口在哪里,8080是服务端口


小智 5

我在裸机服务器上使用 nginx-ingress-controller。为了从所有节点访问托管站点,我将其创建为 DaemonSet 而不是 Deployment(出于裸机考虑)。

该解决方案运行良好,并且完美集成了 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
Run Code Online (Sandbox Code Playgroud)

不幸的是,当应用更改后的规范时,DaemonSet 不会自动重新创建 Pod,因此在检查 Pod 时,我仍然有旧的参数:

/nginx-ingress-controller
  --configmap=$(POD_NAMESPACE)/nginx-configuration
  --publish-service=$(POD_NAMESPACE)/ingress-nginx
  --annotations-prefix=nginx.ingress.kubernetes.io
Run Code Online (Sandbox Code Playgroud)

删除 ingress-nginx 命名空间内的 Pod 会使kubectl --namespace ingress-nginx delete pod --all控制器创建新的 Pod,最后端口在主机网络上可用。

我知道情况可能会有所不同,但希望有人可以通过此节省几分钟。