Kubectl实用技巧:合并YAML与通过Socks代理访问集群

1. 合并所有的YAML文件 在Kubernetes配置中,管理多个YAML文件可能会变得繁琐。为了简化操作,你可以在.kube目录下创建一个名为merge.sh的脚本,用于合并这些YAML文件。 脚本内容: #!/bin/bash set -e WORK_DIR=$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd) pushd "$WORK_DIR" 1>/dev/null 2>&1 # 遍历当前目录,获取所有YAML文件路径 yaml_paths="" while IFS= read -r -d $'\0' file; do if [ -n "$yaml_paths" ]; then yaml_paths+=":$file" else yaml_paths="$file" fi done < <(find "$(pwd)" -type f -name "*.yaml" -print0) # 合并YAML文件并更新Kubeconfig KUBECONFIG=$yaml_paths kubectl config view --flatten > ~/.kube/config popd 1>/dev/null 2>&1 使用方法: 将上述脚本保存为merge.sh。 在终端中运行bash merge.sh。 使用kubectl config get-contexts命令验证合并后的上下文信息。 使用kubectl config use-context <context-name>命令切换上下文。 2. 通过Socks代理访问K8s集群 当Kubernetes集群位于内网环境中时,你可能需要通过SSH Socks代理来访问它。以下是如何设置和使用的步骤:...

March 19, 2024 · Shan You

Hugo 使用帮助

参考 Hugo 主题 Nuo 文章样式预览 搭建 Hugo 个人网站|PaperMod 主题 Hugo-Theme-PaperMod主题文档 Markdown语法指南 hugo-PaperMod hugo博客搭建 | PaperMod主题

March 11, 2024 · 1 min · 15 words · Me

用CoreDNS替代Dnsmasq

运维的兄弟们一般使用dnsmasq来作为内网DNS解析服务。通过/etc/hosts 保存内网服务器IP地址与域名的映射关系。但是dnsmasq也会经常的报一些安全漏洞,让我们不胜其烦的去更新打补丁。最近在一次服务器更新换代的过程中尝试了一下CoreDNS,用它替代dnsmasq。感觉还行,可以跟大家分享一下替代方案。 我们采取docker容器的方式部署CoreDNS,方便版本的更新。使用coredns.sh脚本创建容器。 #!/bin/bash # run core dns docker stop coredns docker rm coredns docker run --name coredns -d \ -p 53:53 -p 53:53/udp \ -v $PWD/hosts:/hosts \ -v $PWD/corefile:/corefile \ coredns/coredns:1.8.3 \ -conf /corefile 通过两个文件corefile, hosts实现了dnsmasq的对应功能。corefile作为CoreDNS的配置文件配置如下 .:53 { errors health log stdout hosts /hosts { fallthrough reload 10s } forward . 114.114.114.114 reload } 其中hosts指令实现了本地hosts文件的解析。fallthrough这个指令表示"如果hosts文件没有找到解析文件就会转发到下一个指令去执行"。下一个指令forward 将域名查询转发到其他dns服务器。hosts文件的作用和/etc/hosts是一样的。 另外我们可以实现一种高可用方案。搭建一台powerdns作为主dns。 多台CoreDNS作为辅助dns。通过cache指令和forward指令配合实现高可用。 CoreDNS代码小巧精悍,很容易进行代码安全检查,相关的安全漏洞也不多。性能方面也不输于dnsmasq。是个不错的替代方案。

March 11, 2024 · Shan You

访问docker中服务的小技巧

在docker容器中的服务是通过docker命令将端口暴露给宿主机的用户使用。有时候出于安全考虑,容器没有暴露其中的一些服务。运维人员为了调试就得登录到容器中,一些精简的容器bash命令不全,管理起来很不方便。目前有两种方法访问容器网络中的服务。 通过nsenter访问容器网络 # 获取容器的pid pid=$(docker inspect -f '{{.State.Pid}}' ${container_id}) # 进入pid对应的namespace sudo nsenter --target $pid --uts --ipc --net --pid 这种方法可以直接在宿主机上暴露容器网络的命名空间,进而通过宿主机的一些命令行工具调试网络。 另外一种方法就是本文重点介绍的。 通过ip netns访问容器网路 这种操作的好处是可以通过类似socat的工具将容器网络中的服务暴露到宿主机网络中。具体操作如下: 首先要求管理员把容器的网络映射到/var/run/netns供ip命令使用。 ln -s /var/run/docker/netns /var/run/netns # 部分容器版本需要运行 1000 是运行docker的userid ln -s /run/user/1000/docker/netns var/run/netns 其次是通过socat与ip netns结合转发端口 # 通过以下命令找到netns id ns_id=$(docker inspect $container_name | grep SandboxKey | awk -F '/' '{print $NF}' | awk -F '"' '{print $1}') # 通过以下命令将宿主机监听的33060端口转发到容器的3306端口 sudo socat tcp-listen:33060,fork,reuseaddr \ exec:'ip netns exec $ns_id socat STDIO "tcp-connect:127....

March 11, 2024 · Shan You

Raspberry Pi Zero W Config Without Wifi

介绍 如果你的树莓派 Zero W 没有连接上 WiFi,或者没有外接键盘和显示器,也可以通过 USB OTG 连接到电脑上进行配置和使用。本文将介绍具体的操作步骤。 准备 1. 将系统 ISO 文件写入 SD 卡中,使用 Raspberry Pi Imager 工具即可。 2. 配置usb otg启动 在主机上插入 SD 卡,修改根目录相关配置文件。 创建一个空的 ssh 文件,用于启动 SSH 服务。 在 config.txt 文件中添加以下内容,开启 OTG 和 UART,将树莓派的 USB 端口连接到主机的 USB 端口。 # 开启otg后主机会出现一个新的usb RNDIS网络设备,vid_0525 pid_a4a2 dtoverlay=dwc2 # 开启uart, 这个需要单独连gpio的线 enable_uart=1 在 cmdline.txt 文件中添加以下内容,启用一些必选和可选参数,如串口输出、文件系统类型等。 console=serial0,115200 console=tty1 root=PARTUUID=d94e8efa-02 rootfstype=ext4 fsck.repair=yes rootwait modules-load=dwc2,g_ether quiet splash plymouth.ignore-serial-consoles 在 cmdline.txt 文件中添加以下内容,启用一些必选和可选参数,如串口输出、文件系统类型等。 以下为示例代码: pi:$6$4ilokQRQxmURT.py$aJWBQ5yniJJPwV3CKawYJcnSK5JZGhrVZYF3K4omRUFv6KL0MysEH7F4NZRMNMcYF.U3xsQvWrx7ZL2GKxuv.1 密钥创建方法: echo 'mypassword' | openssl passwd -6 -stdin 配置wpasupplicant....

March 11, 2024 · Shan You