是否有办法将公共网络接口上使用minikube
创建的Kubernetes群集的API服务器公开给LAN?
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>
但这只会产生一个完全功能失调的迷你集群,我甚至无法从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验证错误。答案 0 :(得分:2)
您需要将LAN接口上的某些端口转发到运行Kubernetes的VM。这适用于Minikube内部的任何服务,不仅适用于Kubernetes本身。
简而言之,如果您使用VirtualBox作为VM驱动程序,则应该:
kubectl describe <servicename>
和minikube service <servicename> --url
可以为您提供帮助。使用vboxmanage
工具将端口转发到VM:
vboxmanage controlvm "minikube" natpf1 "http,tcp,,12345,,80"
其中minikube
- 虚拟机的名称,natfp1
- 虚拟机的虚拟接口,12345
- 虚拟机的端口,80
- 本地端口。< / p>
答案 1 :(得分:1)
您最头痛的原因是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服务器在哪里。在原始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
此块指定执行命令时要验证的用户身份-这就是即使使用--insecure
后您仍会收到未经授权的消息的原因。
因此,要使用来自其他IP的minikube集群,您需要:
1)使用--apiserver-ips <target-ip-here>
(因此,证书minikube生成的是用于您要从中访问它的正确IP)
2)从minikube vm转发8443端口,以使其在<target-ip-here>:8443
可用
3)发布或以其他方式提供从kubectl config view
引用的证书文件
4)使用新的IP并引用已发布的证书文件,将您的kubectl配置设置为模拟本地kubectl配置。