Ansible Kubernetes模块kubeconfig加载失败及JSON Patch路径问题
解决Ansible修改kube-proxy ConfigMap的两个问题
一、解决kubeconfig加载错误问题
- 明确指定kubeconfig路径:在playbook的k8s相关任务中,通过
kubeconfig参数指定容器内kubeconfig的绝对路径,确保容器启动时已将宿主机的kubeconfig挂载到该路径。示例:kubernetes.core.k8s_json_patch: kubeconfig: "/mnt/kube/config" # 其他任务参数... - 检查文件权限:容器内运行Ansible的用户需拥有kubeconfig文件的读取权限,可在挂载时调整权限,或在容器内执行
chmod 600 /path/to/kubeconfig(避免过度开放权限)。 - 验证kubeconfig有效性:在容器内直接执行
kubectl --kubeconfig /path/to/kubeconfig get nodes,确认能正常连接集群,排除文件编码、换行符异常等隐性问题。
二、正确修改ConfigMap中YAML字符串类型的配置
kube-proxy的ConfigMap里config.conf是YAML格式的字符串,而非嵌套的JSON结构,因此不能用/data/config.conf/metricsBindAddress这类路径直接修改内部字段,需按以下方式处理:
方法1:直接替换整个config.conf字符串(适合配置内容固定的场景)
使用JSON Patch的replace操作,替换/data/config.conf路径对应的字符串值,注意保留原配置的所有其他字段,仅修改目标项:
- name: Update kube-proxy ConfigMap metricsBindAddress kubernetes.core.k8s_json_patch: kind: ConfigMap name: kube-proxy namespace: kube-system kubeconfig: "/path/to/your/kubeconfig" patch: - op: replace path: /data/config.conf value: | apiVersion: kubeproxy.config.k8s.io/v1alpha1 kind: KubeProxyConfiguration metricsBindAddress: 127.0.0.1:10249 clientConnection: kubeconfig: /var/lib/kube-proxy/kubeconfig.conf # 此处保留原config.conf中的其他所有配置内容
方法2:动态解析修改(适合配置内容不固定的场景)
先获取原ConfigMap内容,解析YAML字符串修改目标字段,再转换回字符串进行patch:
- name: Fetch kube-proxy ConfigMap kubernetes.core.k8s_info: kind: ConfigMap name: kube-proxy namespace: kube-system kubeconfig: "/path/to/your/kubeconfig" register: kube_proxy_cm - name: Parse config.conf to YAML object set_fact: kube_proxy_config: "{{ kube_proxy_cm.resources[0].data['config.conf'] | from_yaml }}" - name: Update metricsBindAddress value set_fact: updated_kube_proxy_config: "{{ kube_proxy_config | combine({'metricsBindAddress': '127.0.0.1:10249'}) }}" - name: Convert updated config back to YAML string set_fact: updated_config_conf: "{{ updated_kube_proxy_config | to_yaml }}" - name: Patch kube-proxy ConfigMap kubernetes.core.k8s_json_patch: kind: ConfigMap name: kube-proxy namespace: kube-system kubeconfig: "/path/to/your/kubeconfig" patch: - op: replace path: /data/config.conf value: "{{ updated_config_conf }}"
关键注意事项
修改ConfigMap后,kube-proxy Pod不会自动重载配置,需重启DaemonSet生效:
- name: Restart kube-proxy DaemonSet kubernetes.core.k8s: kind: DaemonSet name: kube-proxy namespace: kube-system kubeconfig: "/path/to/your/kubeconfig" state: restarted
内容的提问来源于stack exchange,提问作者Joseph Gagnon
相关产品推荐
相关产品推荐

