从外部访问 K8S API



我想访问 k8s api 资源。 我的集群是 1 节点集群。 kube-api 服务器正在侦听 8080 和 6443 端口。 Curl 本地主机:8080/API/v1 节点内部正在工作。 如果我点击 :8080,它不起作用,因为其他一些服务 (EUREKA) 正在此端口上运行。 这让我可以选择访问:6443 。 为了使API可访问, 有两种方法。

1-为kube-API创建服务,使用一些针对6443的特定端口。对于那个ca.crt,密钥,令牌等是必需的。如何创建和配置这些东西,以便我能够访问 api。

2-在 Waeve 中进行更改(Weave 在 K8s 设置中作为服务提供),以便我的服务器可以访问 K8S API。

任何有选择的人都对我很好。 任何帮助将不胜感激。

我的集群是 1node 集群

其中一个词并不意味着你认为它的作用。如果你还没有遇到过它,你最终会发现尝试在单个节点上运行 kubernetes集群的所有组件的内存和 CPU 压力会导致内存耗尽,然后很多事情将无法正常工作一些非常可怕的错误消息。

我非常感激想要从简单开始,但你会对 3 台机器集群比试图将所有东西挤到一台机器中更快乐。更不用说只有一台机器不会发现任何网络配置错误的事实,当您认为一切正常并且只有将集群扩展到更多节点时,这可能是一个单独的挫败感。

此端口上运行其他一些服务 (EUREKA)。

好吧,冒着陈述显而易见的事实的真正风险:为什么不移动这两个服务中的一个来侦听彼此不同的端口?许多集群配置工具(我喜欢 kubespray)都有一个配置选项,允许人们非常轻松地将 apiserver 使用的不安全端口调整为您选择的端口。它甚至可以是一个特权端口(即:小于 1024),因为dockerroot运行,因此可以使用它喜欢的任何数字--publish端口。

如果拥有:8080对两个软件都如此重要,以至于重新定位端口的成本过高,那么请考虑将"eureka"软件绑定到机器的 IP 并将 kubernetes apiserver 的不安全端口绑定到 127.0.0.1(无论如何,这肯定是意图)。如果"eureka"也在docker运行,您可以更改其--publish以在"左侧"包含一个IP地址,以非常便宜地执行我所说的操作:--publish ${the_ip}:8080:8080(或其他什么)。如果不使用 docker,软件仍然很有可能接受"绑定地址"或"绑定主机",您可以通过它输入 IP 地址,而不是"0.0.0.0"。

1-为kube-API创建服务,使用一些针对6443的特定端口。对于那个ca.crt,密钥,令牌等是必需的。如何创建和配置这些东西,以便我能够访问 api。

集群中运行的每个 Pod 都可以选择声明一个serviceAccountName,默认情况下是default,拥有serviceAccountName的效果是 Pod 中的每个容器都可以访问您提到的那些组件:CA 证书和 JWT 凭据,使 Pod 能够调用 kubernetes API(从集群内始终可以通过以下方式访问它): KubernetesServiceIP、环境变量$KUBERNETES_SERVICE_HOST或主机名https://kubernetes——假设你使用的是 kube-dns)。这些 serviceAccount 凭据会在/var/run/secret/kubernetes.io时自动投影到容器中,而无需您的 Pod 显式声明这些volumeMount

因此,如果您担心必须拥有集群内的凭据,那么这种担忧很快就会消失。如果您关心的是来自集群外部的访问,则有很多方法可以解决这个问题,这些方法并不直接涉及创建该等式的所有 3 个部分。