Emissary ingress 编译安装及使用教程
Emissary 是一个高性能的 Kubernetes Ingress 控制器,源自 Ambassador API 网关。本教程将指导您了解其目录结构,启动文件以及配置文件。
1. 项目目录结构及介绍
在 emissary-ingress/emissary
的根目录下,主要的目录结构如下:
.
├── Chart.yaml # Helm 图表配置文件
├── charts/ # 子图表或依赖项
├── cmd/ # 启动命令所在的目录
│ └── emissary # 主要的 Emissary 进程
├── config/ # 配置模板文件
├── Dockerfile # Docker 映像构建文件
├── examples/ # 示例配置和用例
├──贡献指南.md # 贡献代码的指导
├── Makefile # Make 构建脚本
├── manifests/ # Kubernetes 清单文件
└── README.md # 项目简介
cmd
: 包含emissary
的主进程源代码。config
: 提供配置文件模板。Dockerfile
: 用于构建 Emissary Docker 映像的文件。examples
: 提供示例配置和使用场景。manifests
: 包含 Kubernetes 对象的 YAML 文件,如 Deployment 和 Service。
2. 项目启动文件介绍
Emissary 的启动主要通过 cmd/emissary/main.go
文件进行。在这个文件中,main()
函数初始化了服务器并处理相关配置。它调用了 runCmd()
函数来解析 CLI 参数并设置相应的运行模式。Emissary 使用 Envoy 作为其代理,因此启动时会与 Envoy 交互以创建和管理数据平面。
func main() {
flags := pflag.NewFlagSet("emissary", pflag.ExitOnError)
runCmd(flags)
}
在实际部署时,通常会通过 Kubernetes 的 Deployment 或者使用 Helm 进行安装。
3. 项目配置文件介绍
Emissary 的配置主要由以下几个部分组成:
- Kubernetes ConfigMap: 在 Kubernetes 中,你可以创建一个 ConfigMap 来存储 Emissary 的配置参数,这些参数可以通过环境变量注入到 Pod 中。
- Envoy 配置: Emissary 使用 xDS 协议动态生成 Envoy 配置。这个配置是基于你的 Kubernetes Ingress 规则和端点自动生成的。
- Ambassador Mapping: 如果你熟悉原版的 Ambassador,那么你会知道 Mapping 是定义路由规则的关键。在 Emissary 中,Mapping 可以通过 Kubernetes Custom Resource Definition (CRD)
api/v1/Mappings
来定义。
配置文件模板位于 config/
目录下,包括 envoy-config-template.json
,这是一个基础模板,实际配置会根据 Kubernetes 的状态动态生成。
为了启动 Emissary,你需要准备一个 Kubernetes 的 Deployment
或 StatefulSet
YAML 文件,该文件应该包含如何从 ConfigMap 获取配置信息的细节,以及如何与 Envoy 通信的设置。
示例配置
以下是一个简单的示例 Deployment
YAML,展示了如何通过 ConfigMap 将配置传递给 Emissary:
apiVersion: apps/v1
kind: Deployment
metadata:
name: emissary
spec:
replicas: 1
selector:
matchLabels:
app: emissary
template:
metadata:
labels:
app: emissary
spec:
containers:
- name: emissary
image: <your-emissary-image>
envFrom:
- configMapRef:
name: emissary-config
ports:
- containerPort: 80
这里,我们假设有一个名为 emissary-config
的 ConfigMap。实际配置应根据您的集群环境调整。
以上就是关于 Emissary 项目的基本介绍,包括目录结构、启动文件以及配置文件的讲解。希望这有助于您理解和部署 Emissary。如果您需要更详细的配置或操作步骤,可以查阅项目仓库中的 README 或者官方文档。