vmware-tanzu/cartographer-conventions
GitHub: vmware-tanzu/cartographer-conventions
基于 Kubernetes 的约定管理框架,使平台运维人员能够根据镜像元数据和应用意图自动注入标准化配置,减少手动配置负担。
Stars: 15 | Forks: 8
# Cartographer 规范
约定(Conventions)允许运维人员定义与开发者意图直接相关的横切行为。约定减少了在 Kubernetes 上有效运行应用程序所需的手动配置量。
- [前置条件](#pre-requisites)
- [安装](#install)
- [从源码安装](#from-source)
- [在 AWS 上安装](#running-cartographer-convention-on-an-aws)
- [示例](#samples)
- [贡献](#contributing)
- [许可证](#license)
## 前置条件
本项目需要访问[容器镜像仓库](https://docs.docker.com/registry/introduction/)以获取镜像元数据。对于通过直接加载到本地守护进程(daemon)而绕过镜像仓库的镜像,它将无法工作。
## 安装
### 从源码安装
我们使用 [Golang 1.21+](https://golang.org) 和 [`ko`](https://github.com/google/ko) 来构建 controller,并推荐使用 [`kapp`](https://get-kapp.io) 进行部署。
1. 安装 cert-manager
kapp deploy -n kube-system -a cert-manager -f dist/third-party/cert-manager.yaml
2. 创建一个命名空间以部署组件(如果尚未存在)
kubectl create ns conventions-system
3. 可选:信任额外的证书颁发机构证书
如果 PodIntent 引用的镜像位于某个镜像仓库,而该仓库的证书***未***由公共证书颁发机构(CA)签名,则在应用约定时会发生证书错误 `x509: certificate signed by unknown authority`。要信任额外的证书颁发机构,请将 PEM 编码的 CA 证书包含在一个文件中,并将以下环境变量设置为该文件的位置。
CA_DATA=path/to/certfile # PEM 编码的 CA 证书
4. 构建并安装 Cartographer Conventions
kapp deploy -n conventions-system -a conventions \
-f <( \
ko resolve -f <( \
ytt \
-f dist/cartographer-conventions.yaml \
-f dist/ca-overlay.yaml \
--data-value-file ca_cert_data=${CA_DATA:-dist/ca.pem} \
) \
)
注意:你需要设置 `export KO_DOCKER_REPO=`,以便 `ko` 可以推送到该仓库,并且你的集群可以从中拉取。访问 [ko README](https://github.com/ko-build/ko) 了解更多信息。
## 在 AWS 集群上运行 cartographer convention
为了将 [IAM 角色](https://docs.aws.amazon.com/eks/latest/userguide/iam-roles-for-service-accounts.html)附加到 controller 使用的服务账户,请在安装阶段提供角色 [arn](https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html)。
```
kapp deploy -n conventions-system -a conventions \
-f <( \
ko resolve -f <( \
ytt \
-f dist/cartographer-conventions.yaml \
-f dist/ca-overlay.yaml \
-f dist/sa-arn-annotation-overlay.yaml \
--data-value-file ca_cert_data=${CA_DATA:-dist/ca.pem} \
--data-value aws_iam_role_arn="eks.amazonaws.com/role-arn: arn:aws:iam::133523324:role/role_name"
) \
)
```
服务账户 `cartographer-conventions-controller-manager` 将添加角色 arn 作为注解(annotation)
```
apiVersion: v1
kind: ServiceAccount
metadata:
labels:
app.kubernetes.io/component: conventions
name: cartographer-conventions-controller-manager
namespace: conventions-system
annotations:
eks.amazonaws.com/role-arn: 'eks.amazonaws.com/role-arn: arn:aws:iam::133523324:role/role_name'
```
## 示例
- [Convention Server](./samples/convention-server/)
通过指向 webhook convention server 的 ClusterPodConvention 将自定义约定应用于工作负载。
- [Spring Boot Conventions](./samples/spring-convention-server/)
为 Spring Boot 工作负载应用自定义约定。此约定可以检测工作负载是否由 Spring Boot 构建,并在工作负载上添加一个标签(label)指示框架为 `spring-boot`,以及一个注解指示所使用的 Spring Boot 版本。
- [Dumper Server](./samples/dumper-server/)
将 webhook 请求的内容记录到 stdout。用于捕获约定可用的镜像元数据。
## 贡献
Cartographer 项目团队欢迎社区的贡献。如果你希望贡献代码且尚未签署我们的贡献者许可协议(CLA),当你开启 Pull Request 时,我们的机器人将会更新该 issue。有关 CLA 流程的任何问题,请参阅我们的 [FAQ](https://cla.vmware.com/faq)。有关更详细的信息,请参阅 [CONTRIBUTING.md](CONTRIBUTING.md)。
## 许可证
有关详细信息,请参阅 [LICENSE](LICENSE)。
标签:Cartographer, EVTX分析, EVTX分析, Golang, IDP, Tanzu, 子域名突变, 安全编程, 容器镜像, 平台工程, 应用交付, 开发效能, 证书管理, 请求拦截, 资源编排, 运维自动化