首页 文章

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

提问于
浏览
4
  • 我在Mac OS上使用捆绑了docker的本地kubernetes .

  • 我安装了nginx-ingress-controller .

  • 我管理员将外部http request via ingress发送到我的kubernetes托管容器(例如从我的本地浏览器) . 所有请求都通过nginx端口80或443发送 .

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

2 回答

  • 1

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

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

    args: 
    - "/nginx-ingress-controller"
    - "--tcp-services-configmap=default/nginx-tcp-configmap"
    - "--v=2"
    

    部署configmap:

    apiVersion: v1
    kind: ConfigMap
    metadata:
      name: nginx-tcp-configmap
    data:
      9000: "default/example-service:8080"
    

    其中 9000 是公开端口, 8080 是服务端口

  • 6

    我在裸机服务器上使用nginx-ingress-controller . 为了从所有节点上获取托管站点,我将其创建为DaemonSet而不是部署(Bare-metal considerations) .

    该解决方案运行良好,Ingress规范的更新完美集成 .

    为了使TS服务器可用,我更改了我在arginx-ingress-controller.yml中的Pod的args,如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
    

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

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

相关问题