You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

宿主机如何通过kubectl访问Vagrant内部署的MicroK8s集群?

问题背景

在Vagrant环境中通过以下命令部署基于MicroK8s的Kubeflow集群:

sudo apt-get update
sudo apt-get upgrade
sudo snap install microk8s --classic --channel=1.21/stable
sudo usermod -a -G microk8s $USER
newgrp microk8s
sudo chown -f -R $USER ~/.kube
microk8s enable dns storage ingress metallb:10.64.140.43-10.64.140.49
microk8s config > ~/.kube/config
sudo snap install juju --classic
juju bootstrap microk8s mycontroler
juju add-model kubeflow
juju deploy kubeflow-lite --trust
microk8s kubectl patch role -n kubeflow istio-ingressgateway-operator -p '{"apiVersion":"rbac.authorization.k8s.io/v1","kind":"Role","metadata":{"name":"istio-ingressgateway-operator"},"rules":[{"apiGroups":["*"],"resources":["*"],"verbs":["*"]}]}'
juju config dex-auth public-url=http://10.64.140.43.nip.io
juju config oidc-gatekeeper public-url=http://10.64.140.43.nip.io
juju config dex-auth static-username=admin
juju config dex-auth static-password=admin

已完成的前置操作:

  • 将Vagrant虚拟机内的~/.kube/config文件复制到宿主机
  • 执行ssh -D 9999 vagrant@10.64.140.43建立指向Vagrant环境的SOCKS代理
    故障现象:
  • 宿主机访问http://10.64.140.43.nip.io返回403错误
  • 宿主机无法使用kubectl连接该K8s集群
解决步骤

修复宿主机kubectl连接问题

  1. 修正kubeconfig中的服务地址
    MicroK8s默认生成的config中,apiserver地址默认写的是https://127.0.0.1:16443,该地址在宿主机上指向宿主机自身而非Vagrant虚拟机。打开宿主机上的~/.kube/config,找到对应cluster下的server字段,将IP替换为Vagrant虚拟机的可达IP10.64.140.43,即修改为https://10.64.140.43:16443。
  2. 配置kubectl走SOCKS代理
    执行以下命令让当前终端的kubectl流量走已建立的SOCKS隧道:
    export HTTPS_PROXY=socks5://127.0.0.1:9999
    
    如需永久生效,将上述环境变量写入本机shell配置文件(如~/.bashrc、~/.zshrc)即可。
  3. 跳过TLS证书校验(可选)
    如果修改IP后报证书SAN不匹配错误,在宿主机kubeconfig对应cluster的配置段下添加insecure-skip-tls-verify: true即可临时跳过校验。

修复Kubeflow入口403问题

  1. 确认组件部署状态
    先在Vagrant虚拟机内执行以下命令,确认kubeflow命名空间下所有Pod均为Running状态:
    microk8s kubectl get pods -n kubeflow
    
    重点确认istio-ingressgateway、dex-auth、oidc-gatekeeper三类组件Pod正常运行,存在未启动的Pod时先等待部署完成,或查看对应Pod日志排查启动故障。
  2. 核对Ingress网关地址配置
    执行以下命令查看istio网关的外部分配IP:
    microk8s kubectl get svc -n kubeflow istio-ingressgateway
    
    记录EXTERNAL-IP字段的值,确认该值与dex、oidc配置的public-url地址一致。如果分配的IP不是10.64.140.43,重新执行配置命令将public-url替换为对应IP的nip.io域名,例如分配IP为10.64.140.44时,执行:
    juju config dex-auth public-url=http://10.64.140.44.nip.io
    juju config oidc-gatekeeper public-url=http://10.64.140.44.nip.io
    
  3. 修正浏览器代理配置
    访问nip.io域名时,必须将浏览器代理配置为走127.0.0.1:9999的SOCKS5代理,同时关闭代理工具的"本地地址直连"规则,将*.nip.io从代理绕过列表中移除,避免请求直连公网而非Vagrant环境。
  4. 检查Istio授权策略
    执行以下命令查看集群内的授权策略:
    microk8s kubectl get authorizationpolicy -A
    
    如果存在作用于istio-ingressgateway的deny类型策略,先删除策略后重试访问。
  5. 确认静态账号配置生效
    如果403来自dex登录页面,重新执行静态账号配置命令,等待dex组件Pod重启完成后,使用admin/admin账号登录即可。

内容的提问来源于stack exchange,提问作者Tlaloc-ES

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.27 00:09:20