簡體   English   中英

在 traefik TCP 路由映射中使用 hostSNI(*) 有什么缺點

[英]what is the disadvantage using hostSNI(*) in traefik TCP route mapping

現在我使用HostSNI( * )來映射 TCP 服務,如mysql\\postgresql... in traefik 2.2.1 in Kubernetes cluster v1.18 。 因為我在我的本地機器上並且沒有有效的認證。 這是配置:

apiVersion: traefik.containo.us/v1alpha1
kind: IngressRouteTCP
metadata:
    name: mysql-ingress-tcp-route
    namespace: middleware
spec:
    entryPoints:
        - mysql
    routes:
        - match: HostSNI(`*`)
          services:
            - name: report-mysqlha
                port: 3306

配置在我的本地機器上工作正常。 但我仍然想知道使用HostSNI( )映射策略的HostSNI( 使用HostSNI( )而不是域名有什么缺點 是否可以在我的本地機器上使用假域名?

截至最新的 Traefik 文檔(此時為2.4 ):

如果 HTTP 路由器和 TCP 路由器都偵聽相同的入口點,則 TCP 路由器將在 HTTP 路由器之前應用

需要注意的是,Server Name Indication 是 TLS 協議的擴展。 因此,只有 TLS 路由器才能使用該規則指定域名。 但是,非 TLS 路由器必須明確地使用帶有 *(每個域)的規則來聲明每個非 TLS 請求都將由路由器處理。

因此,回答您的問題:

  • 使用HostSNI(`*`)是在沒有tls 的ingressRouteTCP使用ingressRouteTCP的唯一合理方法——因為您明確要求使用 TCP 路由器,而 TCP 不使用 TLS。
    • 我在ingressRouteTCPHostSNI(`some.fqdn.here`)上取得了不同的成功,並帶有一個tls:部分,但它似乎是2 中受支持的配置
  • 一個可能的“缺點”(airquotes,因為它是主觀的)是:此配置意味着路由到您的entrypoint (即mysql )的任何流量都將通過此ingressRouteTCP路由
    • 試想一下:如果由於某種原因,你有另一個ingressRoute用相同的entrypoint ,與ingressRouteTCP將優先為每1
    • 考慮:例如,如果您想通過相同的entrypoint: mysql路由多個不同的mysql服務entrypoint: mysql ,您將無法基於此配置

對於那些需要具有 TLS 直通和 SNI 路由的 TCP 示例的人

apiVersion: traefik.containo.us/v1alpha1
kind: IngressRouteTCP
metadata:
  name: test-https
  namespace: mynamespace
spec:
  entryPoints:
  - websecure
  routes:
  - kind: Rule
    match: HostSNI(`my.domain.com`)
    services:
    - name: myservice
      port: 443
  tls:
    passthrough: true

暫無
暫無

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

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