获取 PAC Webhook URL

PAC controller 通过 pipelines-as-code-controller Service 接收来自 Git provider 的 webhook 事件。本页介绍在管理员公开该 Service 后,如何查询 webhook URL。

示例使用默认的 PAC 命名空间 tekton-pipelines。如果你的 OpenShiftPipelinesAsCode CR 使用了不同的 targetNamespace,请在命令中将 tekton-pipelines 替换为对应值。

下面的主要章节与 配置访问 的顺序一致:Gateway API、Ingress 和 NodePort。请选择与 PAC 暴露方式匹配的章节。

使用 Gateway API

如果 PAC 是通过 Gateway API 暴露的,请使用本节。

步骤 1:检查 Gateway API 资源。 确认 Gateway 已完成编程,并且路由已被接受:

kubectl get gateway pipelines-as-code -n tekton-pipelines
kubectl get httproute pipelines-as-code -n tekton-pipelines

预期结果:Gateway 显示 PROGRAMMED=True,且 HTTPRoute 已被接受。

步骤 2:获取外部地址。 打印生成的 Envoy Service 及其外部 IP:

kubectl get svc -A \
  -l gateway.envoyproxy.io/owning-gateway-name=pipelines-as-code,gateway.envoyproxy.io/owning-gateway-namespace=tekton-pipelines

EXTERNAL_IP=$(kubectl get svc -A \
  -l gateway.envoyproxy.io/owning-gateway-name=pipelines-as-code,gateway.envoyproxy.io/owning-gateway-namespace=tekton-pipelines \
  -o jsonpath='{.items[0].status.loadBalancer.ingress[0].ip}')

echo "${EXTERNAL_IP}"

预期结果:EXTERNAL_IP 不为空。

如果 EXTERNAL_IP 为空,请先配置集群的 LoadBalancer 提供程序。在 ACP 裸金属集群上,请使用 Alauda Container Platform Load Balancer for MetalLB。参考:配置 MetalLB

步骤 3:验证并获取 webhook URL。 确保 Git provider 能够解析并访问 PAC 域名。例如,从 Git provider 网络将 pac.example.com 解析到 Service 的 EXTERNAL_IP

如果 DNS 还未就绪,或者你只是想从当前机器测试该路由,请使用 curl --resolve

curl -i --resolve "pac.example.com:80:${EXTERNAL_IP}" http://pac.example.com/

在该域名可从 Git provider 网络访问后,打印 URL:

echo "WEBHOOK_URL=http://pac.example.com"

请在 Git provider 中注册此 URL,或在 tkn pac create repo 提示输入 webhook URL 时填写。

除非在暴露清单中移除了 Gateway 监听器的 hostnameHTTPRoutehostnames,否则不要注册原始 IP。

如果 Gateway 配置为 envoyService.type: NodePort,请打印基于 IP 的 webhook URL:

NODEPORT=$(kubectl get svc -A \
  -l gateway.envoyproxy.io/owning-gateway-name=pipelines-as-code,gateway.envoyproxy.io/owning-gateway-namespace=tekton-pipelines \
  -o jsonpath='{.items[0].spec.ports[?(@.port==80)].nodePort}')

NODE_IP=$(kubectl get nodes \
  -o jsonpath='{.items[0].status.addresses[?(@.type=="InternalIP")].address}')

echo "WEBHOOK_URL=http://${NODE_IP}:${NODEPORT}"

使用 Ingress

如果 PAC 是通过 Ingress 暴露的,请使用本节。

步骤 1:检查 Ingress 地址。

kubectl get ingress pipelines-as-code -n tekton-pipelines

步骤 2:获取 webhook URL。 如果 Ingress 有 host,请打印 URL:

HOST=$(kubectl get ingress pipelines-as-code -n tekton-pipelines \
  -o jsonpath='{.spec.rules[0].host}')

echo "WEBHOOK_URL=http://${HOST}"

如果 Ingress 配置了 TLS,请改用 https://${HOST}

echo "WEBHOOK_URL=https://${HOST}"

如果 Ingress 没有 host,请使用 kubectl get ingress 显示的地址,并注册可访问的 IP URL。

使用 NodePort

如果 PAC 是通过专用的 NodePort Service 暴露的,请使用本节。从一个可访问的 node IP 和生成的 NodePort 打印 URL:

NODEPORT=$(kubectl get svc pipelines-as-code-controller-nodeport -n tekton-pipelines \
  -o jsonpath='{.spec.ports[?(@.name=="http-listener")].nodePort}')

NODE_IP=$(kubectl get nodes \
  -o jsonpath='{.items[0].status.addresses[?(@.type=="InternalIP")].address}')

echo "WEBHOOK_URL=http://${NODE_IP}:${NODEPORT}"

验证

webhook URL 必须可以从你的 Git provider 访问。对于公共 Git provider,该 URL 必须可公网访问。对于自托管 Git provider,只要 provider 主机到集群的网络可达即可。

从一个可以访问 PAC 端点的主机上执行快速检查:

WEBHOOK_URL="http://pac.example.com"
curl -i "${WEBHOOK_URL}"

在当前 PAC 版本中,GET / 会返回 200 OK,并带有一个较小的 JSON 状态体。连接被拒绝或超时表示存在网络问题。

后续步骤