快速开始
本指南将通过创建一个简单的“Hello World”触发场景,帮助你开始使用 Tekton Triggers,以演示其基本功能。指南按照以下步骤进行:
- 配置自动
EventListener暴露规则,将EventListeners暴露到外部 - 创建
EventListener和相关资源 - 从
EventListener状态中获取自动生成的 webhook 地址
目录
前提条件步骤 1:配置自动 EventListener 暴露规则前提条件步骤 2:创建示例项目步骤 3:创建 Hello World TaskRun替代方案:简单测试设置选项 A:使用 Port-Forward(最简单)选项 B:使用 NodePort步骤 4:获取 Webhook 地址并测试(使用自动暴露)下一步常见问题前提条件
-
环境要求
Kubernetes版本 1.21 或更高- 已安装
Tekton Operator - 确保
Tekton Triggers已通过 Operator 安装并处于就绪状态
-
所需工具
kubectl命令行工具curl(用于测试触发器)
-
权限
- 需要 集群管理员权限(用于配置
EventListener自动暴露规则) - 需要 命名空间管理员权限(用于创建
EventListener资源)
- 需要 集群管理员权限(用于配置
步骤 1:配置自动 EventListener 暴露规则
关于自动暴露功能
这是一个 Alauda 平台增强功能(不属于标准 Tekton Triggers),用于简化 EventListener 外部访问配置。
暴露 EventListener 的三种方式:
-
自动暴露(Alauda 增强) ⭐ 推荐用于生产环境
- 自动创建并管理
Ingress资源 - 通过
TektonConfig进行集中配置 - webhook URL 会自动填充到
EventListener状态中 - 最适合包含多个
EventListeners的生产环境
- 自动创建并管理
-
手动 Ingress(标准 Tekton 方式)
- 你需要为每个
EventListener手动创建Ingress资源 - 控制更强,但维护成本更高
- 标准的 Kubernetes 方式
- 你需要为每个
-
Port-Forward 或 NodePort(测试/开发) 🚀 最容易上手
- 无需
Ingress或 DNS 配置 - 非常适合本地测试和学习
- 如果你想快速开始,请参见跳到简单测试设置
- 无需
如果你是 Triggers 新手,可以跳过这一步,直接前往简单测试设置部分,使用 port-forward 快速开始。等你准备好进行生产部署时,再回来配置自动暴露。
EventListener 自动暴露功能会根据你配置的暴露规则,自动为你的 EventListeners 创建 Ingress 资源。这样就不需要手动创建和管理 Ingress 资源了。你需要先配置这些规则,才能通过外部 URL 访问 EventListeners。详细配置说明请参见配置 EventListener 自动暴露规则。
前提条件
在配置暴露规则之前,请确保已具备以下条件:
-
LoadBalancer 或 Gateway 配置(推荐用于生产环境):
- 对于生产环境,建议使用
LoadBalancer或Gateway来暴露EventListeners LoadBalancer/Gateway应已配置并可访问- 你应已具备用于 webhook 的外部域名或 IP 地址
- 对于生产环境,建议使用
-
Ingress Controller(如果使用 Ingress):
- 集群中应已安装并运行
Ingresscontroller(例如NGINX、ALB或Traefik) - 你应知道将要使用的
IngressClass名称 - 有关创建 Ingress 的更多信息,请参见 创建 Ingress。
- 集群中应已安装并运行
-
域名和证书(用于 HTTPS):
- 如果使用 HTTPS,请确保已配置域名
- 应准备好 TLS 证书(可以手动创建,也可以通过
cert-manager创建)
重要说明:
- 自动暴露功能会根据暴露规则自动为你创建
Ingress资源。通常你不需要手动创建或修改Ingress资源。 - 如果你使用带自定义端口的
LoadBalancer,请确保在externalHosts字段中包含端口(例如https://webhooks.example.com:8443)。 - 对于开发或测试环境,也可以使用
NodePort代替Ingress/LoadBalancer。有关详细信息,请参见NodePort 配置示例。
通过 TektonConfig 配置暴露规则
创建或更新 TektonConfig 资源以配置暴露规则。创建文件 tektonconfig.yaml:
了解自动暴露
自动暴露功能的工作方式如下:
- 读取你在
TektonConfig中配置的暴露规则 - 自动为符合规则的
EventListeners创建Ingress资源 - 将 webhook URL 填充到
EventListener的status.addresses字段中,便于在 UI 中展示 - 无需再为每个
EventListener手动创建和管理Ingress资源
这种方式提供了一种集中式的管理方式,用于控制 EventListeners 的暴露方式,使你更容易在整个集群中维护一致的 webhook URL 模式。
选择 Ingress 配置方式
自动暴露功能支持两种配置 Ingress 以将 EventListeners 暴露到外部的方式。请选择最适合你环境的方式:
替代方案:NodePort 配置
如果你没有 LoadBalancer 或 Ingress controller,或者希望在开发/测试中使用更简单的设置,也可以改用 NodePort。详情请参见NodePort 配置示例。使用 NodePort 时不需要自动暴露功能,因为你将通过节点 IP 和 NodePort 直接访问 EventListener。
方式 1:通用 Ingress 配置(推荐用于生产环境)
此方式适用于大多数 Kubernetes 环境。你需要:
-
创建 IngressClass(如果尚不存在): 更多信息请参见 创建 Ingress。
-
或者使用 LoadBalancer Service 获取外部 IP 地址 更多信息请参见 配置 Load Balancer。
-
根据你的 Ingress 设置配置暴露规则:
- 如果使用 IngressClass:将
ingressClass设置为你的 IngressClass 名称(例如nginx) - 如果使用 LoadBalancer:从 LoadBalancer service 获取外部 IP/域名,并相应配置
host和externalHosts
- 如果使用 IngressClass:将
IngressClass 的示例配置:
DNS 配置:当使用域名配置 host 字段时,请确保:
- 已正确配置 DNS 记录,将域名解析到你的 Ingress controller 的 IP 地址
- 对于本地测试,你可以将域名添加到
/etc/hosts(Linux/Mac)或C:\Windows\System32\drivers\etc\hosts(Windows) - 该域名必须能被将要发送 webhook 的系统解析(例如 GitHub、GitLab 等)
方式 2:ACP 商业集群快速开始
如果你使用的是 ACP(Alauda Container Platform)商业集群,可以利用平台内置的网关快速完成配置:
- 获取你的 ACP 平台访问地址(例如
https://192.168.1.100) - 获取你的集群名称(例如
test) - 按如下方式配置暴露规则:
- 将
host设置为空(或使用通配符*) - 将
externalHosts设置为:<ACP Platform Access Address>/clusters-rewrite/<Cluster Name> - 最终 webhook URL 将为:
<externalHost>/<urlPathPrefix>/<eventlistener-namespace>/<eventlistener-name>
- 将
ACP 的示例配置:
使用此配置后,webhook 地址将是:
ACP 配置公式:
- ACP 平台 URL:
https://192.168.1.100 - 集群名称:
test - URL Path Prefix:
/triggers(可配置) - External Host:
https://192.168.1.100/clusters-rewrite/test - 最终 Webhook URL:
https://192.168.1.100/clusters-rewrite/test/triggers/<eventlistener-namespace>/<eventlistener-name>
示例:如果 ACP 平台地址是 https://192.168.1.100,集群名称是 test,并且 urlPathPrefix 为 /triggers,那么访问地址就是 https://192.168.1.100/clusters-rewrite/test/triggers。
重要:请将占位值(webhooks.example.com、nginx 等)替换为你的实际域名、ingress class 和 external host URL。如果你没有配置域名,可以使用空的 host 字段,并将 externalHosts 配置为你的实际可访问 URL。
应用 TektonConfig
验证配置
等待几分钟让 Operator 同步配置,然后进行验证:
ConfigMap 中应包含你的暴露规则配置。(注意:ConfigMap 名称 trigger-wrapper-config 是内部技术名称;你不需要记住它,因为你是通过 TektonConfig 来管理配置的。)
步骤 2:创建示例项目
创建命名空间
关于 EventListener 的 ServiceAccount
在这个快速开始中,我们将使用 默认 ServiceAccount,它由 Tekton Triggers 系统 自动创建。这个 ServiceAccount 名称为 triggers-default-sa,并具有命名空间范围权限。
工作原理:
- 安装
Tekton Triggers时,它会自动在每个命名空间中创建一个默认ServiceAccount - 你可以通过运行以下命令找到它:
kubectl get sa -n tekton-triggers-demo -l triggers.tekton.dev/default-service-account - 这个
ServiceAccount有权限在同一命名空间内创建TaskRuns和PipelineRuns - 无需手动配置——只需通过名称引用它:
triggers-default-sa
何时需要自定义 ServiceAccount:
- 如果你需要在多个命名空间中创建资源(跨命名空间触发)
- 如果你需要超出默认范围的额外权限
- 有关自定义
ServiceAccount的配置,请参见设置 EventListener
步骤 3:创建 Hello World TaskRun
创建 Task
创建文件 hello-task.yaml:
创建 Trigger Template
创建文件 trigger-template.yaml:
创建 Trigger Binding
创建文件 trigger-binding.yaml:
创建 Event Listener
创建文件 event-listener.yaml:
ServiceAccount 说明:我们使用的是 自动创建 的默认 ServiceAccount(通过将 serviceAccountName 设置为 triggers-default-sa)。这个 ServiceAccount 由 Tekton Triggers 系统创建,并具有在同一命名空间内创建 TaskRuns/PipelineRuns 的权限。由于本示例中的所有资源都位于同一命名空间中,这已经足够。自动暴露功能会根据第 1 步中配置的暴露规则,为此 EventListener 自动创建一个 Ingress。
应用配置
应用所有已创建的资源:
替代方案:简单测试设置
如果你跳过了第 1 步(自动暴露配置)并希望快速测试,可以使用 port-forward 或 NodePort 在无需 Ingress 或 DNS 配置的情况下访问 EventListener。
选项 A:使用 Port-Forward(最简单)
等待 EventListener 就绪
将本地端口转发到 EventListener
保持此终端窗口打开。此时可以通过 http://localhost:8080 访问 EventListener。
通过 Port-Forward 发送测试请求
打开一个新的终端并运行:
查看结果
选项 B:使用 NodePort
用于在不使用 Ingress 的情况下,从本机之外访问 EventListener:
将 EventListener Service 修补为 NodePort
获取 NodePort
通过 NodePort 发送测试请求
何时使用哪种方式:
- Port-forward:本地测试、开发、学习
- NodePort:从其他机器测试、开发集群
- 自动暴露(Ingress):生产部署、外部 webhook(GitHub、GitLab 等)
步骤 4:获取 Webhook 地址并测试(使用自动暴露)
等待 EventListener 就绪
获取自动生成的 Webhook 地址
自动暴露功能会根据第 1 步中配置的暴露规则,自动生成外部 webhook 地址。这些地址会填充到 EventListener 的 status.addresses 字段中:
地址格式:webhook 地址遵循如下模式:<externalHost>/<urlPathPrefix>/<eventlistener-namespace>/<eventlistener-name>
例如:https://webhooks.example.com/triggers/tekton-triggers-demo/hello-listener
如果 status.addresses 为空,请检查:
- 你配置的暴露规则是否与
EventListener的命名空间匹配 - 自动暴露控制器是否正在运行并已处理该
EventListener - 查看控制器日志:
kubectl logs -n tekton-pipelines -l app=tektoncd-enhancement-controller
网络访问:请确保你用于测试的外部 host URL 可以被访问。如果你是在集群内测试,可能需要改用 port-forward 或访问内部 service 地址。
验证 Webhook 域名可访问性
在发送测试请求之前,请先验证 webhook 域名是否可访问:
重要:请确保基于 LoadBalancer/Gateway 配置的 webhook 域名可以被外部系统访问。如果你要在 GitHub、GitLab 或其他外部系统中配置 webhook,它们必须能够访问该 URL。请检查:
- DNS 记录是否配置正确
- LoadBalancer/Gateway 是否配置正确且可访问
- 防火墙规则是否允许入站流量
- TLS 证书是否有效(如果使用 HTTPS)
向 Webhook 发送测试请求
查看结果
清理资源
测试完成后,你可以删除已创建的资源:
下一步
现在你已经成功创建并测试了一个基础的 Tekton Triggers 示例,可以继续:
- 浏览 Tekton Triggers 的概念
- 学习如何使用 设置 EventListeners 获取常见配置说明
- 配置 EventListener 自动暴露规则 以支持更高级的暴露场景
- 设置并使用 GitLab events 来触发 pipeline
常见问题
-
EventListener Pod 启动失败
- 检查默认
ServiceAccount是否具有足够的命名空间范围权限 - 验证
EventListener资源是否配置正确 - 查看
EventListenerPod 日志:kubectl logs -n tekton-triggers-demo -l app=el-hello-listener
- 检查默认
-
Webhook 地址(status.addresses)为空
- 验证你配置的暴露规则是否与
EventListener的命名空间匹配 - 检查自动暴露控制器是否正在运行:
kubectl get pods -n tekton-pipelines -l app=tektoncd-enhancement-controller - 查看控制器日志,确认是否存在匹配错误或配置错误
- 确保
namespaceSelector.matchNames中的命名空间与你的EventListener命名空间一致
- 验证你配置的暴露规则是否与
-
Trigger 没有响应
- 验证 webhook URL 是否可访问(检查
status.addresses) - 检查请求格式是否正确
- 查看
EventListenerPod 日志:kubectl logs -n tekton-triggers-demo -l app=el-hello-listener - 验证
Ingress是否正确配置:kubectl get ingress -n tekton-triggers-demo
- 验证 webhook URL 是否可访问(检查
-
未创建 TaskRun
- 确认
TriggerTemplate配置正确 - 检查
TriggerBinding中的参数映射 - 查看
EventListenerPod 的错误日志
- 确认