Contour项目本地开发与测试环境搭建指南
前言
Contour是一个高性能的Kubernetes Ingress控制器,使用Envoy作为数据平面。本文将详细介绍如何在本地环境中搭建Contour的开发测试环境,帮助开发者快速上手项目开发。
环境准备
基础工具安装
在开始Contour开发前,需要准备以下基础工具:
-
Docker:用于构建和运行容器化环境
- Mac用户可安装Docker Desktop
- Linux用户可通过系统包管理器安装
-
开发工具链:
- Git:版本控制工具
- Make:构建工具
- GCC:用于Go的竞态检测
- kind:本地Kubernetes集群工具
- kubectl:Kubernetes命令行工具
- jq/yq:JSON/YAML处理工具
-
Go语言环境:
- 需要安装与Contour当前版本兼容的Go版本
- 可通过查看项目Makefile中的
BUILD_BASE_IMAGE
变量确认具体版本要求
MacOS特有配置
Mac用户需要额外配置网络连接:
- 安装Docker Mac Net Connect工具
- 该工具会在主机和Docker Desktop Linux VM之间建立隧道
- 解决MetalLB IP无法直接访问的问题
源码获取与构建
获取源代码
- 创建项目fork
- 克隆代码到本地:
git clone git@<代码托管平台>:YOUR-USERNAME/contour.git
基础构建命令
-
编译Contour二进制文件:
go build ./cmd/contour
-
运行单元测试:
go test ./...
-
运行单个包测试:
cd internal/<package> go test .
本地开发环境搭建
使用kind集群
kind是运行本地Kubernetes集群的理想工具:
-
创建kind集群:
kind create cluster --config=./examples/kind/kind-expose-port.yaml --name=contour
-
部署Contour基础组件:
kubectl apply -f examples/contour
开发工作流
推荐以下高效开发流程:
-
在kind集群中运行Envoy
-
本地运行Contour控制平面
-
修改代码后重新构建运行:
make install && contour serve --kubeconfig=$HOME/.kube/config --xds-address=0.0.0.0 --insecure
-
测试时使用
local.projectcontour.io
域名,该域名已配置指向127.0.0.1
测试策略
Contour项目采用多层次的测试体系:
单元测试(Unit Test)
- 针对特定函数或包的测试
- 部分测试会跨多个包
功能测试(Feature Test)
- 位于
internal/featuretests
- 测试Kubernetes配置到Envoy配置的转换
- 使用Contour事件处理器和xDS服务器
端到端测试(E2E Test)
- 位于
test/e2e
- 完整测试Contour在集群中的行为
- 验证HTTP请求在各种配置下的表现
代码规范与提交
代码风格
- 使用
gofumpt
进行严格的Go代码格式化 - 运行
make format
可自动格式化代码
提交信息规范
- 使用命令式语气编写提交信息
- 格式示例:
internal/contour: 添加quux功能 为实现#xxyyz中的quux功能,需要 先处理greep点,再确保处理结果正确 Fixes #xxyyz Signed-off-by: 姓名 <邮箱>
导入别名规范
- 使用
thing_version
模式命名导入 - 示例:
contour_v1 "projectcontour/contour/apis/projectcontour/v1" envoy_v3 "projectcontour/contour/internal/envoy/v3"
构建与验证
镜像构建
-
使用Dockerfile构建镜像:
docker build -t <仓库>/contour:latest . docker push <仓库>/contour:latest
-
或使用Makefile辅助:
REGISTRY=<仓库> VERSION=latest make push
变更验证
- 修改部署清单指向新构建的镜像
- 部署到测试集群验证功能
结语
本文详细介绍了Contour项目的本地开发环境搭建、测试策略和代码规范。通过kind集群和本地开发模式的结合,开发者可以高效地进行功能开发和测试验证。遵循项目的代码规范和测试要求,可以确保贡献的代码质量符合项目标准。
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考