本文档说明了如何开始为nginx Ingress controller进行开发。它包括如何构建,测试和发布 ingress controller。
必须将代码检出为k8s.io的子目录,而不是github.com。
mkdir -p $GOPATH/src/k8s.io
cd $GOPATH/src/k8s.io
# Replace "$YOUR_GITHUB_USERNAME" below with your github username
git clone https://github.com/$YOUR_GITHUB_USERNAME/ingress-nginx.git
cd ingress-nginx
前提: 必须安装Minikube. 查看 releases 获取安装说明.
如果您使用 MacOS 并部署到 minikube, 则以下命令将构建本地nginx控制器容器镜像, 并将 ingress controller部署到在名称空间ingress-nginx中启用RBAC的minikube集群中:
$ make dev-env
可以使用以下命令重建Nginx控制器容器映像:
$ ARCH=amd64 TAG=dev REGISTRY=$USER/ingress-controller make build container
该镜像仅由重建后创建的Pod使用。删除旧pod将导致新的Pod被拉起:
$ kubectl get pods -n ingress-nginx
$ kubectl delete pod -n ingress-nginx nginx-ingress-controller-<unique-pod-id>
构建使用vendor
目录中的依赖项, 必须在构建二进制文件/映像之前安装该依赖项. 有时,您可能需要更新依赖项.
本指南要求您安装 dep 依赖管理工具.
检查您使用的Dep
的版本,并确保它是最新的.
$ dep version
dep:
version : devel
build date :
git hash :
go version : go1.9
go compiler : gc
platform : linux/amd64
如果您使用的是Dep
的旧版本,则可以按照以下说明进行更新:
$ go get -u github.com/golang/dep
这将自动将依赖项保存到vendor
目录.
$ cd $GOPATH/src/k8s.io/ingress-nginx
$ dep ensure
$ dep ensure -update
$ dep prune
所有ingress controllers都是通过Makefile构建的。 根据您的要求,您可以构建原始服务器二进制文件,本地容器映像或将映像推送到远程存储库.
为了使用本地Docker,您可能需要设置以下环境变量:
# "gcloud docker" (default) or "docker"
$ export DOCKER=<docker>
# "quay.io/kubernetes-ingress-controller" (default), "index.docker.io", or your own registry
$ export REGISTRY=<your-docker-registry>
要查找registry,只需运行: docker system info | grep Registry
e2e测试映像也可以通过Makefile构建.
$ make e2e-test-image
然后,您可以通过导出映像并将其加载到minikube docker上下文中,使该映像在您的minikube主机上可用
$ docker save nginx-ingress-controller:e2e | (eval $(minikube docker-env) && docker load)
构建原始服务器二进制文件
$ make build
TODO: 添加原始服务器二进制文件所需的更多特定说明.
构建本地容器映像
$ TAG=<tag> REGISTRY=$USER/ingress-controller make container
将容器映像推送到远程镜像仓库
$ TAG=<tag> REGISTRY=$USER/ingress-controller make push
有几种将 ingress controller部署到集群上的方法. 请检查 部署指南
要运行单元测试,只需运行
$ cd $GOPATH/src/k8s.io/ingress-nginx
$ make test
如果您有权访问Kubernetes集群,则还可以使用ginkgo运行e2e测试
$ cd $GOPATH/src/k8s.io/ingress-nginx
$ make e2e-test
NOTE: 如果e2e pod一直挂在ImagePullBackoff中, 请确保已将e2e nginx-ingress-controller 镜像提供给minikube,如构建e2e测试镜像中所述
要在本地运行lua代码的单元测试,请运行:
$ cd $GOPATH/src/k8s.io/ingress-nginx
$ ./rootfs/etc/nginx/lua/test/up.sh
$ make lua-test
Lua测试位于 $GOPATH/src/k8s.io/ingress-nginx/rootfs/etc/nginx/lua/test
.
创建新的测试文件时,它必须遵循命名约定 _test.lua,否则它将被忽略。
如上所示,所有Makefile都会产生一个发行二进制文件。要将其发布给更广泛的Kubernetes用户群,
请将映像推送到容器镜像仓库, 例如
gcr.io. 所有发行映像均托管在 gcr.io/google_containers
,
并根据semver 方案进行标记.
示例发行版可能看起来像:
$ make release
请遵循以下准则以减少发布: