无外网环境使用helm部署Falco

背景 在K8s集群中,希望引入Falco进行统一的集群操作审计 这就需要先安装Falco,借助json插件与k8saudit插件创建一个Webhook客户端,专用于接收API Server的操作审计数据 当前已有falco:0.44.0镜像,以及一个Falco的custom_values.yaml: driver: enabled: false collectors: enabled: false controller: kind: deployment services: - name: k8saudit-webhook type: NodePort ports: - port: 9765 protocol: TCP falco: rules_files: - /etc/falco/k8s_audit_rules.yaml - /etc/falco/rules.d plugins: - name: k8saudit library_path: /usr/share/falco/plugins/libk8saudit.so init_config: "" open_params: "http://:9765/k8s-audit" - name: json library_path: /usr/share/falco/plugins/libjson.so init_config: "" load_plugins: - k8saudit - json json_output: true json_include_output_property: true json_include_tags_property: true 关于格式 values文件的格式可参考:https://raw.githubusercontent.com/falcosecurity/charts/refs/heads/master/charts/falco/values.yaml 在机器可以访问外网的情况下,执行helm install falco falcosecurity/falco -n kube-audit -f custom_values.yaml即可将Falco部署到集群 但我们的集群无法访问外网,首先拉取不到Chart,其次也拉取不到falcoctl以及两个插件,甚至连插件的index文件都无法获取 因此,需要考虑离线安装Falco 手动下载Chart 执行: wget https://github.com/falcosecurity/charts/releases/download/falco-9.0.0/falco-9.0.0.tgz 即可获取falco-9.0.0.tgzChart文件,如此一来,Chart的本地化解决 falcoctl离线安装 在Pod启动时,会尝试拉取falcoctl容器镜像,它会被自动配置为Falco Pod的一个Init Container,用于管理安全规则Rules、插件Plugins ...

June 1, 2026

将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

Docker环境下安装AList过程与心得

最近在树莓派上使用Docker部署了AList作为个人云盘使用,同时AList还支持整合各大网盘资源,可以极大方便我管理自己的网盘资源,在这里记录一下部署的过程,供之后参考 Docker环境安装 在Linux环境中安装Docker非常方便,直接下载即可。我的树莓派是基于Debian的系统所以直接安装即可,没有遇到什么问题,注意国内网络需要在/etc/docker/daemon.json配置一下镜像源。 docker有效镜像源持续更新网站:Docker/DockerHub 国内镜像源/加速列表(2月15日更新-长期维护) 对于Windows系统,安装Docker的步骤相对比较复杂,参考文章:Windows 11:Docker Desktop 安装和配置指南,因为我是在树莓派上安装的AList,所以有关Windows系统部署AList的过程不在本文讨论中 安装完成后,执行systemctl status docker检查Docker服务是否正常运行 外接硬盘配置 为了能让AList担当个人云盘的功能,我在树莓派外部设置了一个1TB的机械硬盘用于存储数据,硬盘插在硬盘盒上,通过USB线与树莓派连接 连接硬盘后,命令sudo fdisk -l可以查看硬盘的相关信息 在Linux中连接一个硬盘后,一些图形化的系统可以自动挂载硬盘,我的树莓派系统也可以自动挂载,但默认挂载点是在/media的,我不想让它挂载在这个地方,于是决定手动挂载 创建目录:/mnt/1TB_disk作为指定挂载点,然后进行挂载: sudo mount /dev/sda1 /mnt/1TB_disk 挂载完成后,命令lsblk -f可以查看硬盘的文件系统类型、UUID等信息: FICN@FICN:~ $ lsblk -f NAME FSTYPE FSVER LABEL UUID FSAVAIL FSUSE% MOUNTPOINTS sda └─sda1 exfat 1.0 67AF-3F5B 926.7G 1% /mnt/1TB_disk 但这样的话,每次连接硬盘时都需要手动挂载一次,很麻烦,所以可以使用autofs实现自动将连接的硬盘挂载至指定目录,当一段时间不使用硬盘资源时,autofs也会自动取消硬盘挂载 autofs自动挂载 sudo apt-get install autofs下载autofs,然后systemctl enable autofs、systemctl start autofs启动服务,创建/etc/auto.master添加: /mnt /etc/auto.disk --timeout=60 最后创建/etc/auto.disk并设置: 1TB_disk -fstype=exfat,raw,noatime :/dev/disk/by-uuid/67AF-3F5B 这里指定了硬盘文件系统类型为exfat,并使用UUID来指定需要被挂载的硬盘,这两个都是之前执行lsblk -f命令获得的信息 如此配置后,硬盘将被自动挂载至/mnt/1TB_disk目录 最后还要禁用系统原有的自动挂载服务:systemctl stop fstab、systemctl disable fstab ...

February 17, 2025

Docker配置阿里云镜像后仍报错问题

Kubernetes需要使用docker作为运行时,在Linux机器上安装docker后,尝试拉取hello-world镜像时出现问题 安装docker时一切都很顺利: sudo apt update sudo apt install docker.io sudo systemctl start docker sudo systemctl enable docker 但在进行docker pull hello-world拉取镜像时报错: Error response from daemon: Get "https://registry-1.docker.io/v2/": net/http: request canceled while waiting for connection (Client.Timeout exceed ed while awaiting headers) 解决方法 首先需要更换docker源,这里使用阿里云镜像加速器与另一个自己收集的源。进入/etc/docker/daemon.json文件中如此配置: { "registry-mirrors": [ "https://ok5mwqnl.mirror.aliyuncs.com", "https://docker.1ms.run" ] } 配置完成后执行sudo systemctl restart docker重启docker服务 重启后运行docker pull hello-world仍失败,报错信息与先前一致 这时考虑DNS配置问题,进入/etc/resolv.conf文件,在原有的若干nameserver之上再增加两条: # Generated by NetworkManager nameserver 8.8.8.8 nameserver 8.8.4.4 # 此处为原有的若干行nameserver # ... 配置完成后运行docker pull hello-world,成功拉取镜像,执行sudo docker images查看本地镜像: ...

January 13, 2025