【问题标题】:Using edge / proxy node certificate identity使用边缘/代理节点证书身份
【发布时间】:2019-07-11 22:24:39
【问题描述】:

我使用 haproxy 作为堡垒服务器/集群网关,因为我的网络中只有一些节点可以直接访问外部网络。我的内部节点是 kubernetes 集群的一部分,需要能够从集群外部的私有注册表中提取图像,这需要证书身份。

k8s 集群内部节点 -> 边缘节点上的 haproxy -> docker 注册表

我正在尝试在我的 haproxy.cfg 中配置我的后端以路由到 docker 注册表,并使用边缘节点的证书身份更新请求。 (内部节点没有 docker 注册表可接受的证书,并且我未被允许在内部节点上托管外部节点的证书。)我现在拥有的内容如下所示......

frontend ft_ssl
   bind <boxIP>:443
   mode http
   default_backend bk_global_import_registry_certs

backend bk_global_import_registry_certs
   mode http
   balance roundrobin
   server registry_alias-0 <registryIP>:443 ssl ca-file fullyqualified/ca.crt crt fullyqualified/file.pem check
   server registry_alias-1 <registryIP2>:443 ssl ca-file fullyqualified/ca.crt crt fullyqualified/file.pem check

我目前在 /etc/systemd/system/docker.service.d/http-proxy.conf 中有 HTTPS_PROXY setting 并且收到 400 Bad Request。下面的已清理日志消息,仅更改为删除 IP 或拼写错误。

InternalIP:randomPort [09/Jul/2019:13:28:08.659] ft_ssl bk_global_import_registry_certs 0/0/10/5/15 400 350 - - ---- 1/1/0/0/0 0/0 {} "CONNECT externalFQDN:443 HTTP/1.1"

对于那些通过 kubernetes 或 docker 标签查看此问题的人,我也考虑过设置 pull-through cache,但我意识到这仅适用于 Docker 的公共注册表 - 请参阅 open Docker GitHub issue 1431 以供其他人试图找到解决问题的方法那也是。

【问题讨论】:

    标签: docker kubernetes haproxy


    【解决方案1】:

    发布为我们解决问题的答案,以防它帮助其他人......

    来自内部节点的所有流量现在都路由到 HAProxy。

    我不再使用 /etc/systemd/system/docker.service.d/http-proxy.conf 中的 HTTPS_PROXY 设置。代理通过是不合适的,因为我无法使用内部节点的证书对 docker 注册表进行身份验证。

    从内部节点,我现在将 docker 注册表视为不安全注册表,方法是将其地址添加到 insecure-registries: [] 中的 /etc/docker/daemon.json。

    我们现在可以使用在 HAProxy 后端转发的证书访问我们的内部私有注册表。我们确实会在前端验证证书,但因为我们在 insecure-registries 中列出了注册表,所以 Docker 接受证书名称不匹配。

    注意到一个副作用:使用我们的解决方案从“默认”docker 注册表中提取图像而不指定前缀不会成功。例如,要从 Docker 中拉取,您将从 registry-1.docker.io/imageName:imageVersion 中拉取,而不仅仅是 imageName:imageVersion。

    【讨论】:

      【解决方案2】:

      我可能弄错了,但据我所知,Haproxy 不能用作直接 HTTP 代理,它只能用作反向 HTTP 代理。您应该使用 Squid 或类似的东西作为直接 HTTP 代理。

      如果您希望 Haproxy 像您一样为您终止 SSL,那么您需要将 Docker 映像的主机名部分更改为您的 Haproxy 节点的主机名。您还应该确保您的 Docker 守护进程信任 Haproxy 证书或将 Haproxy 添加到所有 Kube 节点上的 INSECURE_REGISTRIES 列表中。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-03-03
        • 1970-01-01
        • 1970-01-01
        • 2013-07-12
        相关资源
        最近更新 更多