簡體   English   中英

如何使用 nginx-ingress controller 公開 TCP 的多個服務?

[英]How to expose multiple services with TCP using nginx-ingress controller?

我有多個運行 RDP 應用程序的部署,它們都通過 ClusterIP 服務公開。 我在我的 k8s 集群中有 nginx-ingress controller 並允許 tcp 我在 nginx-ingress Z594C103F2C6E04C3D8AB059F0C31 中添加了--tcp-services-configmap標志

apiVersion: v1 
kind: ConfigMap
metadata:
name: tcp-services
namespace: ingress-nginx
data:
  3389: “demo/rdp-service1:3389”

這將公開“rdp-service1”服務。 而且我還有 10 個這樣的服務需要在同一個端口號上公開,但是如果我在同一個 configmap 中添加更多服務,就像這樣

...
data
  3389: “demo/rdp-service1:3389”
  3389: “demo/rdp-service2:3389”

然后它會刪除之前的服務數據,因為這里我也在 k8s 中部署了 external-dns,所以所有由 ingress 使用host: ...創建的記錄都將開始指向附加到 configmap 中新添加的服務的部署。

現在我的最終要求是,只要我 append 是入口中新創建的部署(RDP 應用程序)的規則,它就會開始允許 TCP 連接,所以有什么方法可以實現這一點。 或者有沒有其他可用的 Ingress controller 可以解決這種類型的用例並且也可以很容易地與 external-dns 集成?

注意:- 我正在使用 AWS EKS 集群和帶有外部 DNS 的 Route53。

將此答案發布為社區 wiki,以解釋問題中的一些主題,並希望指出解決方案。

隨意擴展/編輯它。


NGINX Ingress主要負責轉發HTTP / HTTPS流量。 通過添加tcp-services / udp-services它還可以將TCP / UDP流量轉發到各自的端點:

The main issue is that the Host based routing for Ingress resource in Kubernetes is targeting specifically HTTP / HTTPS traffic and not TCP ( RDP ).

您可以實現以下場景:

  • Ingress controller
    • 3389 - RDP Deployment #1
    • 3390 - RDP Deployment #2
    • 3391 - RDP Deployment #3

沒有基於Host的路由。 它更像是端口轉發。

旁注! 此設置還取決於LoadBalancer分配端口的能力(這可能會受到雲提供商規范的限制)


至於可能不太直接的解決方案,我會看看以下資源:

我還會檢查以下鏈接:

實際上,我真的不知道您為什么要使用該 configmap。

據我所知,nginx-ingress-controller 正在路由來自同一端口的流量並基於主機進行路由。 因此,如果您想在同一端口上公開您的應用程序,請嘗試使用:

apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
  name: {{ .Chart.Name }}-ingress
  namespace: your-namespace
  annotations:
    kubernetes.io/ingress.class: nginx
spec:
  rules:
  - host: your-hostname
    http:
      paths:
      - pathType: Prefix
        path: "/"
        backend:
          serviceName: {{ .Chart.Name }}-service
          servicePort: {{ .Values.service.nodeport.port }}

查看您的要求,我覺得您需要一個 LoadBalancer 而不是 Ingress

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM