cofide/cofidectl
GitHub: cofide/cofidectl
一款基于 SPIRE 构建的命令行工具,旨在简化 Kubernetes 工作负载的身份管理及自动化 mTLS 配置。
Stars: 10 | Forks: 1
# cofidectl:用于 Kubernetes 工作负载身份的 CLI
[](https://github.com/cofide/cofidectl/actions?query=workflow%3Aci+branch%3Amain)
`cofidectl` 是一个命令行工具,旨在简化 Kubernetes 工作负载身份提供商的安装和管理,并为应用程序提供无缝且安全的 mTLS。它构建于 [SPIFFE](https://spiffe.io/docs/latest/spiffe-about/overview/)/[SPIRE](https://spiffe.io/docs/latest/spire-about/) 之上,并提供了一组易于配置的抽象。`cofidectl` 可用于部署单集群实例,或处理跨多个集群的联邦。
_注意:`cofidectl` 是一个处于活跃开发阶段的早期项目,请注意它可能会发生破坏性变更。_
## 背景
在 [Cofide](https://www.cofide.io),我们正在构建一个适用于多云和混合云环境、无缝且安全的工作负载身份平台。欢迎浏览我们的[公开文档](https://docs.cofide.dev)以获取更多信息。
如果您在生产环境中需要具有企业级支持的工作负载身份平台,请[与我们交流](mailto:hello@cofide.io)以了解更多关于我们平台的信息。
## 安装
预构建的 `cofidectl` 二进制文件可从项目的 [GitHub releases](https://github.com/cofide/cofidectl/releases) 页面下载。
或者,也可以从源代码构建 `cofidectl`。
## 构建
构建 `cofidectl` 二进制文件需要:
- [Go 1.24 toolchain](https://golang.org/doc/install)
- [`just`](https://github.com/casey/just) 作为命令运行器
运行单元测试并构建 `cofidectl` 二进制文件:
```
just build
```
## 快速开始
执行快速开始需要:
- [`Docker`](https://docs.docker.com/engine/install/)
- [`kind`](https://kind.sigs.k8s.io/docs/user/quick-start)
- [`kubectl`](https://kubernetes.io/docs/tasks/tools/)
- [Cloud provider Kind](https://github.com/kubernetes-sigs/cloud-provider-kind) 用于暴露 SPIRE 联邦端点
- `docker run -d --name cloud-provider-kind --network kind --restart unless-stopped -v /var/run/docker.sock:/var/run/docker.sock registry.k8s.io/cloud-provider-kind/cloud-controller-manager:v0.6.0`
### 部署单信任域 Cofide 实例
部署到 Kubernetes 集群只需几个命令即可完成。此示例假设您有一个名为 `kind` 的 kind 集群,并希望为信任域 `cofide-a.test` 的工作负载颁发 SPIFFE 身份。
```
rm -f cofide.yaml
./cofidectl init
./cofidectl trust-zone add cofide-a --trust-domain cofide-a.test
./cofidectl cluster add kind --trust-zone cofide-a --profile kubernetes --kubernetes-context kind-kind
```
接下来是添加“证明策略”——这些是 `cofidectl` 规则,用于描述工作负载及其环境的属性,以决定工作负载身份的颁发。在此示例中,我们将创建一个策略(`namespace-demo`),该策略将为 `demo` 命名空间中的工作负载启用 SPIFFE 身份。
```
./cofidectl attestation-policy add kubernetes --name namespace-demo --namespace demo
./cofidectl attestation-policy-binding add --trust-zone cofide-a --attestation-policy namespace-demo
```
最后,将变更部署到集群:
```
./cofidectl up
```
```
✅ Installed: Installation completed for cofide-a on cluster kind
✅ Ready: All SPIRE server pods and services are ready for cofide-a in cluster kind
✅ Configured: Post-installation configuration completed for cofide-a on cluster kind
```
就是这么简单,开始使用吧!🚀
_如果您的部署卡在 `Waiting for SPIRE server pod and service...`,可能需要重启 `cloud-provider-kind`,以便它为您的 SPIRE 服务器创建外部 IP。_
### 部署通过 mTLS 保护的应用程序
现在让我们部署一个应用程序,看看如何无缝获取 SPIFFE 身份并将其用于 mTLS。
我们有一个简单的 `ping-pong` 应用程序,其中包含一个发起“ping”的客户端和一个回复“pong”的服务器。出于示例目的,服务器和客户端都将位于 `demo` 命名空间中。`Justfile` 配方使应用两者变得快速而简单:
```
just -f demos/Justfile deploy-ping-pong kind-kind "spiffe://cofide-a.test/ns/demo/sa/ping-pong-client"
```
查看客户端 Pod 的日志,查看启用 mTLS 的 ping-pong 🔐:
```
kubectl logs -n demo deployments/ping-pong-client --follow
```
```
2024/11/02 15:45:50 INFO ping...
2024/11/02 15:45:50 INFO ...pong
2024/11/02 15:45:55 INFO ping...
2024/11/02 15:45:55 INFO ...pong
```
### 部署多个联邦信任域
请按照[此指南](docs/multi-tz-federation.md)了解如何在多个集群中配置和部署 Cofide 实例,并在跨越信任域的工作负载之间建立联邦信任。
## 贡献
我们非常感谢您的贡献!请参阅[贡献者指南](CONTRIBUTING.md)。
标签:CLI, DevSecOps, EVTX分析, Go, JSONLines, mTLS, Ruby工具, SPIFFE, SPIRE, WiFi技术, 上游代理, 双向认证, 子域名突变, 安全, 工作负载身份, 文档结构分析, 日志审计, 服务网格, 服务身份, 混合云, 网络安全, 证书管理, 请求拦截, 超时处理, 身份管理, 隐私保护, 集群联邦, 零信任