Envoy Gateway 是由 Envoy Proxy 社区推动的一个开源 API 网关项目,结合了 Contour、Emissary 等项目力量。这个指南将帮助你理解如何贡献代码和参与社区。
开始之前
了解项目的 目标和愿景 是非常重要的。Envoy Gateway 旨在作为一个独立或基于 Kubernetes 的应用程序网关,使用 Gateway API 资源来管理 Envoy 代理。
如何参与
1. 沟通协作
在开发前,建议通过 GitHub 或 Slack 与社区交流。始终创建一个 GitHub Issue 来讨论你的想法。
2. 贡献准则
遵守 贡献准则 ,它包括代码规范和社区行为准则。
3. 提交代码
- 签署 DCO:确保你的提交信息包含 DCO 签名。
- 创建 PR:Fork 仓库后,提交 PR。确保通过所有自动化测试。
- 代码审查:PR 会被维护人员审查,一旦满足条件,将会被合并。
构建和测试指南
环境准备
- 必需工具:
- Go(版本 1.22+)
- Make(版本 4.0+)
- Docker(可选,版本 20.10.16+,用于构建镜像)
- Python3
- 设置步骤:确保所有工具均已安装并配置好环境变量。
代码构建
- 构建命令:
- 构建全部二进制文件:
make build
- 仅构建 Envoy Gateway:
make build BINS="envoy-gateway"
- 构建控制工具
egctl
:make build BINS="egctl"
- 构建全部二进制文件:
测试
- 运行测试:执行
make test
来进行 Go 语言的测试。 - 生成测试数据:执行
make testdata
来生成 YAML 格式的测试数据。
Lint 检查
- 执行 Lint:运行
make lint
确保代码风格和标准一致性(注意修正现有的拼写错误)。
镜像操作
- 构建镜像:
IMAGE=docker.io/<dockerhub-id>/gateway-dev make image
- 推送多架构镜像:
IMAGE=docker.io/<dockerhub-id>/gateway-dev make push-multiarch
部署和调试
- 本地集群创建:使用
make create-cluster
在 Kind 上创建测试/开发用的集群。 - 部署到 Kubernetes:使用
IMAGE=docker.io/<dockerhub-id>/gateway-dev TAG=<image-tag> make kube-deploy
将 Envoy Gateway 部署至 Kubernetes。 - 部署示例应用:执行
make kube-demo
部署 demo 后端服务及相关网络资源。 - 删除部署:执行
make kube-demo-undeploy
删除示例应用。执行make kube-undeploy
删除 Envoy Gateway。
当你完成 Envoy Gateway 和示例应用部署后,运行 kubectl get pod -A
命令,你将看到如下所示的 Pod 列表。
查看 Kind 中运行的 Pod
NAMESPACE NAME READY STATUS RESTARTS AGE
default backend-96f75bbf-tcdf7 1/1 Running 1 (97s ago) 13h
envoy-gateway-system envoy-default-eg-e41e7b31-668f754989-wb7xr 2/2 Running 2 (97s ago) 13h
envoy-gateway-system envoy-gateway-b457dc69b-l77cr 1/1 Running 2 (97s ago) 13h
kube-system coredns-5dd5756b68-b494d 1/1 Running 1 (97s ago) 14h
kube-system coredns-5dd5756b68-j46bx 1/1 Running 1 (97s ago) 14h
kube-system etcd-envoy-gateway-control-plane 1/1 Running 1 (97s ago) 14h
kube-system kindnet-sq4b4 1/1 Running 1 (97s ago) 14h
kube-system kube-apiserver-envoy-gateway-control-plane 1/1 Running 1 (97s ago) 14h
kube-system kube-controller-manager-envoy-gateway-control-plane 1/1 Running 2 (97s ago) 14h
kube-system kube-proxy-4x72s 1/1 Running 1 (97s ago) 14h
kube-system kube-scheduler-envoy-gateway-control-plane 1/1 Running 2 (97s ago) 14h
local-path-storage local-path-provisioner-6f8956fb48-shjcz 1/1 Running 2 (59s ago) 14h
metallb-system controller-5c6b6c8447-kjl4n 1/1 Running 2 (59s ago) 14h
metallb-system speaker-6zlrb 1/1 Running 1 (97s ago) 14h
调试 Envoy 配置
端口转发设置:
export ENVOY_DEPLOYMENT=$(kubectl get deploy -n envoy-gateway-system --selector=gateway.envoyproxy.io/owning-gateway-namespace=default,gateway.envoyproxy.io/owning-gateway-name=eg -o jsonpath='{.items[0].metadata.name}') kubectl port-forward deploy/${ENVOY_DEPLOYMENT} -n envoy-gateway-system 19000:19000
访问:在浏览器中打开
http://localhost:19000
访问 Envoy 管理界面进行配置调试。网络环境适配:在中国大陆进行构建和推送镜像时,可能需要设置 Docker 代理以确保依赖的镜像能够下载。详细操作可参考 设置 Docker 代理 。
kind load
命令加载到 kind 里。需要下载和加载到 kind 里的镜像见下面的代码。#!/bin/bash
echo "Pull the images and load them into the kind cluster..."
docker pull envoy-gateway-control-plane quay.io/metallb/controller:v0.13.10
docker pull envoy-gateway-control-plane quay.io/metallb/speaker:v0.13.10
docker pull envoy-gateway-control-plane docker.io/jimmysong/gateway-dev:435a4dc1
docker pull envoy-gateway-control-plane envoyproxy/envoy:distroless-dev
docker pull envoy-gateway-control-plane gcr.io/k8s-staging-gateway-api/echo-basic:v20231214-v1.0.0-140-gf544a46e
kind load docker-image -n envoy-gateway --nodes envoy-gateway-control-plane quay.io/metallb/controller:v0.13.10
kind load docker-image -n envoy-gateway --nodes envoy-gateway-control-plane quay.io/metallb/speaker:v0.13.10
kind load docker-image -n envoy-gateway --nodes envoy-gateway-control-plane docker.io/jimmysong/gateway-dev:435a4dc1
kind load docker-image -n envoy-gateway --nodes envoy-gateway-control-plane envoyproxy/envoy:distroless-dev
kind load docker-image -n envoy-gateway --nodes envoy-gateway-control-plane gcr.io/k8s-staging-gateway-api/echo-basic:v20231214-v1.0.0-140-gf544a46e
更多资源
想深入了解如何进行高级测试和贡献,详见 Envoy Gateway 开发文档 。
加入我们,与全球开发者共同推进 Envoy Gateway 的成长,同时提升你的开发技能和对开源社区的理解。
加入 Envoy Gateway 中文交流群
为了便于中文和中国时区的用户交流,Envoy Gateway 社区成立的微信群,详见 通知 ,该群成立于 2023 年 4 月,目前已有 400 多名成员。你可以联系 联系我 、 刘训灼 、 赵化冰 等入群。