【问题标题】:single HAproxy to expose multiple kubernetes cluster kube-api service单个 HAproxy 暴露多个 kubernetes 集群 kube-api 服务
【发布时间】:2021-10-04 01:29:33
【问题描述】:

目前我们正在使用 haproxy 使用 tcp:bind 模式公开 kube-api,效果很好。

我们需要保持单个 haproxy 来处理大约 4 个不同的集群 kube-api 端点,在这种情况下 tcp:bind 将不起作用。我们计划使用 acl 来匹配不同集群的主机字符串,以使用 http 模式路由相应的后端。当我们添加 ssl 时,我们得到以下错误。

Unable to connect to the server: x509: certificate relies on legacy Common Name field, use SANs or temporarily enable Common Name matching with GODEBUG=x509ignoreCN=0

【问题讨论】:

    标签: kubernetes haproxy kube-apiserver


    【解决方案1】:
    #---------------------------------------------------------------------
    # Global settings
    #---------------------------------------------------------------------
    global
        daemon
        user                haproxy
        group               haproxy
        log                 /dev/log local6 notice
        log                 /dev/log local5 info
        maxconn             50000
        #chroot              /var/lib/haproxy
        pidfile             /var/run/haproxy.pid
    
    #---------------------------------------------------------------------
    # common defaults that all the 'listen' and 'backend' sections will
    # use if not designated in their block
    #---------------------------------------------------------------------
    defaults
        mode                 tcp
        option               tcplog
        log                  global
        option               dontlognull
        timeout connect      5000
        timeout client       50000
        timeout server       50000
    
    #---------------------------------------------------------------------
    # dedicated stats page
    #---------------------------------------------------------------------
    listen stats
        mode http
        bind :22222
        stats enable
        stats uri            /haproxy?stats
        stats realm          Haproxy\ Statistics
        stats auth           <mylogin>:<mypass>
        stats refresh        30s
    
    #---------------------------------------------------------------------
    # main frontend which proxys to the backends
    #---------------------------------------------------------------------
    frontend main_https_listen
        bind <ip address>:443
        mode                tcp
        option              tcplog
        log                 global
        tcp-request inspect-delay 5s
        tcp-request content accept if { req.ssl_hello_type 1 }
    
    #---------------------------------------------------------------------
    # Common HAProxy nodes configuration
    #---------------------------------------------------------------------
    
    # -------------------------------
    # ACLs
    # -------------------------------
    
    acl acl_SIT_AT35073      req.ssl_sni -i <app_url1>.my.domain.net  # SIT_AT35073 is just an internal code we use, but you can use any alias
    acl acl_SIT_AT34305      req.ssl_sni -i <app_url2>.my.domain.net
    acl acl_SIT_AT28548      req.ssl_sni -i <app_urlN>.my.domain.net
    
    # -------------------------------
    # Conditions
    # -------------------------------
    
    use_backend backend_SIT_AT35073 if acl_SIT_AT35073   # same here
    use_backend backend_SIT_AT34305 if acl_SIT_AT34305
    use_backend backend_SIT_AT28548 if acl_SIT_AT28548
    
    #---------------------------------------------------------------------
    # Backends
    #---------------------------------------------------------------------
    
    # APP 1
    backend backend_SIT_AT35073
        description APPNAME1
        mode tcp
        balance source
        option ssl-hello-chk
        server server_SIT_AT35073_1 <apache_server1>.my.domain.net:443 check
        server server_SIT_AT35073_2 <apache_server2>.my.domain.net:443 check
    
    # APP 2
    backend backend_SIT_AT34305
        description APPNAME2
        mode tcp
        balance source
        option ssl-hello-chk
        server server_SIT_AT34305_1 <apache_server3>.my.domain.net:443 check
        server server_SIT_AT34305_2 <apache_server4>.my.domain.net:443 check
    
    # APP N
    backend backend_SIT_AT28548
        description APPNAMEN
        mode tcp
        balance source
        option ssl-hello-chk
        server server_SIT_AT28548_1 <apache_server5>.my.domain.net:443 check
        server server_SIT_AT28548_2 <apache_server6>.my.domain.net:443 check
    
    

    我已使用此解决方案公开多个 kube-api,但我无法使用 http 模式完成此操作

    【讨论】:

      猜你喜欢
      • 2020-12-17
      • 2020-06-18
      • 1970-01-01
      • 2019-02-17
      • 2023-01-25
      • 1970-01-01
      • 2018-07-20
      • 2016-03-25
      • 2020-09-28
      相关资源
      最近更新 更多