Envoy Gateway 是由 Envoy Proxy 社区推动的一个开源 API 网关项目,结合了 Contour、Emissary 等项目力量。这个指南将帮助你理解如何贡献代码和参与社区。
了解项目的目标和愿景是非常重要的。Envoy Gateway 旨在作为一个独立或基于 Kubernetes 的应用程序网关,使用 Gateway API 资源来管理 Envoy 代理。
在开发前,建议通过GitHub或Slack与社区交流。始终创建一个 GitHub Issue 来讨论你的想法。
遵守贡献准则,它包括代码规范和社区行为准则。
make build
make build BINS="envoy-gateway"
egctl
:make build BINS="egctl"
make test
来进行 Go 语言的测试。make testdata
来生成 YAML 格式的测试数据。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 上创建测试/开发用的集群。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 列表。
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
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 设置代理,否则你将无法下载一些依赖镜像。你可以将它们下载到本地后再用 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 社区成立的微信群,详见通知,该群成立于 2023 年 4 月,目前已有 400 多名成员。你可以联系联系我、刘训灼、赵化冰等入群。
最后更新于 2024/12/11