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

如何配置MicroK8s,避免切换网络时频繁更新证书?

解决MicroK8s切换网络后Kubectl命令挂起的永久方案

问题根源

你猜的没错,MicroK8s默认会用节点当前的外部IP生成API Server证书,切换网络后IP变更,Kubectl访问时证书验证不通过,就会出现无限挂起的情况。用refresh-certs临时修复可行,但每次切换都操作太麻烦,下面是几个永久解决办法:

方法一:用本地回环地址访问API Server(推荐)

本地回环地址127.0.0.1不受外部网络变化影响,让Kubectl通过回环访问MicroK8s,从根本上避开IP依赖问题:

  1. 修改API Server配置
    编辑MicroK8s的API Server启动参数文件:

    sudo nano /var/snap/microk8s/current/args/kube-apiserver
    

    添加或修改以下参数:

    --advertise-address=127.0.0.1
    --bind-address=0.0.0.0
    

    保存后重启MicroK8s:

    sudo microk8s stop && sudo microk8s start
    
  2. 刷新API Server证书(包含回环地址)
    执行命令让证书添加上127.0.0.1和localhost的SAN(主题备用名称):

    sudo microk8s refresh-certs --cert apiserver.crt
    
  3. 更新Kubeconfig指向回环地址
    替换Kubeconfig里的API Server地址为127.0.0.1:

    microk8s config | sed 's/server: https:\/\/.*:16443/server: https:\/\/127.0.0.1:16443/' > ~/.kube/config
    

    之后验证连接:

    kubectl get nodes
    

方法二:用固定主机名替代IP

如果需要其他设备也能访问你的MicroK8s,可配置固定主机名:

  1. 设置机器固定主机名

    sudo hostnamectl set-hostname dev-k8s-laptop
    
  2. 让主机名指向本地回环(可选,本地访问用)
    编辑/etc/hosts添加:

    127.0.0.1   dev-k8s-laptop
    
  3. 修改API Server配置使用主机名
    编辑/var/snap/microk8s/current/args/kube-apiserver,添加:

    --advertise-address=dev-k8s-laptop
    --bind-address=0.0.0.0
    

    重启MicroK8s并刷新证书:

    sudo microk8s stop && sudo microk8s start
    sudo microk8s refresh-certs --cert apiserver.crt
    
  4. 更新Kubeconfig使用主机名

    microk8s config | sed 's/server: https:\/\/.*:16443/server: https:\/\/dev-k8s-laptop:16443/' > ~/.kube/config
    

团队统一配置建议

可以把上述步骤写成一个shell脚本,分享给团队成员一键执行:

#!/bin/bash
# 配置MicroK8s使用回环地址
sudo sed -i '/--advertise-address/d' /var/snap/microk8s/current/args/kube-apiserver
sudo sed -i '/--bind-address/d' /var/snap/microk8s/current/args/kube-apiserver
echo "--advertise-address=127.0.0.1" | sudo tee -a /var/snap/microk8s/current/args/kube-apiserver
echo "--bind-address=0.0.0.0" | sudo tee -a /var/snap/microk8s/current/args/kube-apiserver

# 重启并刷新证书
sudo microk8s stop && sudo microk8s start
sudo microk8s refresh-certs --cert apiserver.crt -y

# 更新kubeconfig
microk8s config | sed 's/server: https:\/\/.*:16443/server: https:\/\/127.0.0.1:16443/' > ~/.kube/config

echo "配置完成,执行kubectl get nodes验证"

内容的提问来源于stack exchange,提问作者Bart

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.12 01:50:01