gpt4 book ai didi

kubernetes - 如何将 minikube 集群的 API 服务器暴露给公网(LAN)?

转载 作者:行者123 更新时间:2023-12-02 11:35:48 26 4
gpt4 key购买 nike

有没有办法公开使用 minikube 创建的 Kubernetes 集群的 API 服务器在 LAN 的公共(public)网络接口(interface)上?
minikube start --help谈论这个选项(和两个类似的):

  --apiserver-ips ipSlice \
A set of apiserver IP Addresses which are used in the generated \
certificate for localkube/kubernetes. This can be used if you \
want to make the apiserver available from outside the machine (default [])

所以这似乎是可能的。但我无法弄清楚如何或找到任何进一步的信息。

我天真地尝试过:
minikube start --apiserver-ips <ip-address-of-my-lan-interface>

但这只会产生一个完全功能失调的 minikube 集群,我什至无法从 localhost 访问它。

按照下面一个答案中的建议,我向 Kubernetes 添加了端口转发,如下所示:
vboxmanage controlvm "minikube" natpf1 "minikube-api-service,tcp,,8443,,8443"

然后我实际上可以从网络上的不同主机访问 API 服务器:
curl --insecure https://<ip-address-of-host-running-minikube>:8443

但回应是:
{
"kind": "Status",
"apiVersion": "v1",
"metadata": {

},
"status": "Failure",
"message": "forbidden: User \"system:anonymous\" cannot get path \"/\"",
"reason": "Forbidden",
"details": {

},
"code": 403
}

这有两个问题:
  • 我必须使用 --insecure对于curl调用,否则我会收到 SSL 验证错误。
  • 我收到了回复,但回复只是告诉我不允许我使用 API...
  • 最佳答案

    您头疼的主要原因是 minikube(通常)在具有自己 IP 地址的 VM 中运行。为了安全起见,它会生成一些自签名证书并配置 api 命令行工具 kubectl 来使用它们。证书是自签名的,使用 VM IP 作为证书的主机名。

    如果您使用 kubectl config view,您可以看到这一点.这是我的:

    apiVersion: v1
    clusters:
    - cluster:
    certificate-authority: /home/sam/.minikube/ca.crt
    server: https://192.168.39.226:8443
    name: minikube
    contexts:
    - context:
    cluster: minikube
    user: minikube
    name: minikube
    current-context: minikube
    kind: Config
    preferences: {}
    users:
    - name: minikube
    user:
    client-certificate: /home/sam/.minikube/client.crt
    client-key: /home/sam/.minikube/client.key

    让我们打开它。
    server: https://192.168.39.226:8443 - 这告诉 kubectl 服务器在哪里。在 vanilla minikube 设置中,它是 https://<ip-of-the-vm>:8443 .请注意,它的 https。
    certificate-authority: /home/sam/.minikube/ca.crt - 这一行告诉工具使用什么证书授权文件来验证 TLS 证书。因为它是自签名证书,即使在普通设置中,您也必须告知 curl 有关证书颁发机构文件或使用 --insecure .
    - name: minikube
    user:
    client-certificate: /home/sam/.minikube/client.crt
    client-key: /home/sam/.minikube/client.key

    该 block 指定在发出命令时要验证的用户身份 - 这就是即使在使用后仍会收到未经授权消息的原因 --insecure .

    因此,要使用来自不同 IP 的 minikube 集群,您需要:
    1) 使用 --apiserver-ips <target-ip-here> (因此 minikube 生成的证书适用于您将要访问的正确 IP)
    2) 从 minikube vm 转发 8443 端口,使其在 <target-ip-here>:8443 可用
    3) 发布或以其他方式提供从 kubectl config view 引用的证书文件
    4) 设置您的 kubectl 配置以模仿您的本地 kubectl 配置,使用新 ip 并引用已发布的证书文件。

    关于kubernetes - 如何将 minikube 集群的 API 服务器暴露给公网(LAN)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49897126/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com