如何在宿主机通过Python访问Docker容器内的Minikube Kubernetes集群
解决方案
首先纠正认知误区:该报错的根本原因不是宿主机未运行Kubernetes,而是宿主机当前用户路径下没有可访问目标Minikube集群的kubeconfig配置文件。只要拿到对应集群的有效配置文件且宿主机到集群的网络可达,即使宿主机不运行K8s组件也可以远程操作集群。
方法1:导出容器内Minikube的kubeconfig到宿主机使用
这是最贴合你当前使用场景的方案,操作步骤如下:
- 复制Minikube容器内的kubeconfig文件到宿主机指定路径
docker cp kubernetes:/root/.kube/config ~/.kube/minikube_docker_config
- 查看Minikube容器的IP地址,替换kubeconfig里的服务地址
# 查看容器IP docker inspect kubernetes | grep IPAddress
打开刚才复制到宿主机的~/.kube/minikube_docker_config文件,把clusters.cluster.server字段的值从默认的https://127.0.0.1:8443替换为https://<刚才查到的容器IP>:8443,也可以在启动Minikube容器时提前把8443端口映射到宿主机,就不用修改IP。
- 同时把配置文件中所有证书相关的路径(certificate-authority、client-certificate、client-key对应的路径),替换为你从容器中复制出来的对应证书文件的宿主机路径,证书文件可以用同样的
docker cp命令从容器的/root/.kube/目录下复制到宿主机。 - Python代码中指定加载该配置文件即可
from kubernetes import config, client # 传入刚才导出的配置文件路径 config.load_kube_config(config_file="/home/你的用户名/.kube/minikube_docker_config") # 后续可以正常创建客户端操作集群 v1 = client.BatchV1Api()
方法2:使用集群内配置加载(适合代码跑在集群Pod内的场景)
如果你的Python代码后续是要部署到该Minikube集群中运行,可以直接使用集群内配置加载方法,不需要依赖外部kubeconfig文件,兼容性更强:
from kubernetes import config, client try: # 代码跑在集群Pod内时自动加载Pod挂载的服务账号配置 config.load_incluster_config() except config.ConfigException: # 本地开发调试时加载本地导出的kubeconfig文件 config.load_kube_config(config_file="/home/你的用户名/.kube/minikube_docker_config")
方法3:宿主机直接安装Minikube生成配置
如果不想复用容器内的Minikube集群,可以直接在宿主机安装Minikube工具,执行minikube start启动后会自动在宿主机~/.kube/目录下生成有效配置文件,此时直接调用config.load_kube_config()即可正常运行。
注意事项
- kubernetes Python SDK版本需要和Minikube集群的K8s版本匹配,避免出现API兼容问题
- 操作前确认宿主机可以正常访问Minikube容器的6443/8443端口,没有被防火墙拦截
内容的提问来源于stack exchange,提问作者Gaëtan
相关产品推荐
相关产品推荐

