测试K8s集群内部联通性

设置集群时,有时需要测试集群内部Pod之间的连通性,或是测试DNS服务是否正常 可以使用kubectl run命令来创建一个Pod,并指定Pod名称、镜像以及命名空间 例如,创建一个busybox镜像,目的是测试kube-authen命名空间下的Pod是否能ping通、DNS服务是否生效: kubectl run ping-test --image=busybox -n kube-authen -it -- sh 以上命令的含义是:在kube-authen命名空间内创建一个镜像为busybox的Pod,Pod名称为ping-test,创建后立刻打开一个交互式终端 在终端内即可进行ping测试或是nslookup测试 有时仅需要进行临时测试,测试完毕后需要立刻删除Pod,那么可以执行指令: kubectl run ping-test --image=busybox -n kube-authen -it --rm -- ping google.com 这里的--rm参数意为“会话结束后自动删除Pod” 注意 如果仅创建了busybox的Pod而没有指定运行命令,例如kubectl run ping-test --image=busybox -n kube-authen,则会导致Pod无限重启,原因是: 在未指定命令的情况下,busybox使用默认入口点,默认行为是启动shell,但启动shell后没有可执行的命令,于是shell自动退出,这表现为容器进程退出,K8s即认为容器启动失败并进行自动重启,如此不断循环,产生CrashLoopBackOff错误

April 16, 2025

将Go服务部署至K8s提供Webhook认证

以之前构建完成的Webhook工程为例,将此Go应用部署至k8s中并指定为认证服务器 构建镜像 在工程根目录创建Dockerfile: FROM alpine:3.17 WORKDIR /app # 复制已编译好的二进制文件(此处hook-demo为已构建的Go应用) COPY hook-demo /app/ # 设置可执行权限 RUN chmod +x /app/hook-demo # 暴露服务端口 EXPOSE 9999 # 运行应用 CMD ["/app/hook-demo"] 在Dockerfile所在目录中,运行sudo docker build -t webhook-auth:v1.0 . 完成后检查: ficn@master:~/k8s-webhook-auth$ sudo docker images REPOSITORY TAG IMAGE ID CREATED SIZE webhook-auth v1.0 536c17b2a66c 13 seconds ago 31.8MB alpine 3.17 775f483016a7 7 months ago 7.08MB Pod与Service部署 创建deploy-webhook.yaml: # ~/deploy/deploy-webhook.yaml apiVersion: apps/v1 kind: Deployment metadata: name: webhook-auth namespace: kube-authen # 命名空间 labels: app: webhook-auth spec: replicas: 1 # 本地开发环境,使用单个副本 selector: matchLabels: app: webhook-auth template: metadata: labels: app: webhook-auth spec: containers: - name: webhook-auth image: webhook-auth:v1.0 # 本地镜像名称 imagePullPolicy: Never # 强制使用本地镜像,不尝试从远程拉取 ports: - containerPort: 9999 # webhook实际端口 name: http 创建service-webhook.yaml: ...

April 10, 2025

构建基于Webhook的LDAP认证环境

本文章所描述的各操作最终目的是将Webhook服务接入Kubernetes集群的认证流程中 LDAP安装 对于Ubuntu,使用apt安装命令:apt-get install -y slapd ldap-utils 安装过程中会出现交互式界面,可以在其中配置管理员密码(不重要,接下来会再次配置) 安装后,slapd服务即开始执行,此时运行dpkg-reconfigure slapd命令,对slapd服务再次进行配置 如果提示未找到dpkg-reconfigure命令,则执行sudo apt install debconf进行安装,若已安装,则可能是dpkg-reconfigure未被配置到PATH中,可以临时使用绝对路径:sudo /usr/sbin/dpkg-reconfigure slapd 配置界面将再次出现,在其中设置: 属性 配置 Omit configuration No DNS domain example.com Organization name orgldap Administrator password 123456 Remove database No Move old database Yes 初始设置完成后,在终端输入sudo slapcat命令即可查看条目: ficn@master:~$ sudo slapcat dn: dc=example,dc=com objectClass: top objectClass: dcObject objectClass: organization o: orgldap dc: example structuralObjectClass: organization entryUUID: 8056974e-a31a-103f-8e78-156a6f1ed35c creatorsName: cn=admin,dc=example,dc=com createTimestamp: 20250401075602Z entryCSN: 20250401075602.540676Z#000000#000#000000 modifiersName: cn=admin,dc=example,dc=com modifyTimestamp: 20250401075602Z 增加条目 创建组织 创建文件base.ldif,设置三个条目,分别为组织管理者、人员组织单位以及组的组织单位 ...

April 2, 2025

kubeadm init 等待超时问题

问题描述 配置master节点时,执行kubeadm init --config kubeadm-config.yaml --v=5命令后,执行至初始化Pod步骤时报错: [wait-control-plane] Waiting for the kubelet to boot up the control plane as static Pods from directory "/etc/kubernetes/manifests". This can take up to 4m0s [kubelet-check] Initial timeout of 40s passed. Unfortunately, an error has occurred: timed out waiting for the condition This error is likely caused by: - The kubelet is not running - The kubelet is unhealthy due to a misconfiguration of the node in some way (required cgroups disabled) ...... 经过检查,host配置无误,cluster的IP地址也与本机相同 ...

January 15, 2025