安全的Kubernetes API允许Gitlab集成



我想在私人机器上配置Kubernetes,以便使用Gitlab CI/CD工具。其目的只是在几天内试用Gitlab。

使用这种设置进行生产是不可能的。我希望您能帮助保护Kubernetes API。我不需要防黑客的解决方案,但至少我希望API不会暴露给天真的恶意用户。这台机器连接到一个专用网络,所以我无法想象除了一台几天后就会关闭的旧的刚刚重置的机器之外,还有什么会被黑客入侵。

到目前为止,我已经能够设置Minikube,创建一个kube代理并将其公开给Gitlab。整合取得了成功。

然而,我注意到Kubernetes API对任何人都是公开的。例如,任何人都可以访问https://my-ip.com:port/api/v1/namespaces/default/pods。我应该如何保护API,以便gitlab可以连接到集群(按照这种方法(,但没有证书或令牌的其他人不能访问集群?我用CA证书和服务令牌设置了Gitlab,但我想这是不需要的,因为Kubernetes API看起来是公共的。

您不必使用kube-proxy来公开集群。您应该阅读访问集群上运行的服务,其中提到了如何连接到集群的方式。

通过公共IP访问服务。

  • 使用类型为NodePortLoadBalancer的服务,使该服务可在集群外访问。请参阅服务和kubectl公开文档
  • 根据您的集群环境,这可能只是将服务暴露给您的公司网络,也可能将其暴露给internet。考虑暴露的服务是否安全。它自己进行身份验证吗
  • 将吊舱放置在服务后面。要从一组副本中访问一个特定的pod,例如用于调试,请在pod上放置一个唯一的标签,并创建一个选择该标签的新服务
  • 在大多数情况下,应用程序开发人员应该没有必要通过nodeIP直接访问节点

使用代理谓词访问服务、节点或pod。

  • 在访问远程服务之前进行apiserver身份验证和授权。如果服务不够安全,无法暴露在互联网上,或无法访问节点IP上的端口,或无法进行调试,请使用此选项
  • 代理可能会导致某些web应用程序出现问题
  • 仅适用于HTTP/HTTPS
  • 此处描述

从集群中的节点或pod进行访问。

  • 运行一个pod,然后使用kubectl exec连接到其中的shell。从该shell连接到其他节点、pod和服务
  • 某些集群可能允许您通过ssh连接到集群中的某个节点。从那里您可以访问群集服务。这是一种非标准的方法,对某些集群有效,但对其他集群无效。浏览器和其他工具可能已安装,也可能未安装。群集DNS可能无法工作

我还建议阅读Kubernetes Security 101:Risks and 29 Best Practices,并安全地配置Kubernetesneneneba API服务器。

例如,更改default名称空间并使用不同的名称空间来隔离应用程序。使用TLS并启用RBAC。

最新更新