crossplane/xfncrossplane-function-runner 是一个用于 Crossplane 的参考 Composition Function 运行器镜像,旨在为 Kubernetes 集群中的 Crossplane 控制平面提供标准化的 Composition Function 执行环境。该镜像作为 Crossplane 合成逻辑扩展的基础组件,负责加载、执行用户定义的 Composition Function,并与 Crossplane API 进行交互,实现自定义资源合成逻辑的落地。
FunctionIO)接收与输出响应crossplane-api 服务或外部暴露地址)bashdocker pull crossplane-function-runner:latest # 或指定版本,如 v0.1.0
通过 docker run 启动运行器,挂载函数代码目录并配置 Crossplane API 地址:
bashdocker run -d \ --name crossplane-function-runner \ -v /path/to/local/functions:/functions # 挂载本地函数目录(含函数二进制/Wasm模块) \ -e CROSSPLANE_API_URL=[***] \ # Crossplane API 地址(必填) \ -e LOG_LEVEL=info \ # 日志级别(默认 info) \ -e FUNCTIONS_DIR=/functions \ # 函数代码存放目录(默认 /functions) \ -p 8080:8080 \ # 暴露运行器监听端口(默认 8080) \ crossplane-function-runner:latest
在 Kubernetes 集群中部署时,建议通过 Deployment 管理,并挂载包含函数代码的 ConfigMap/Secret:
yamlapiVersion: apps/v1 kind: Deployment metadata: name: crossplane-function-runner namespace: crossplane-system spec: replicas: 1 selector: matchLabels: app: function-runner template: metadata: labels: app: function-runner spec: containers: - name: runner image: crossplane-function-runner:latest args: ["--log-level", "info"] ports: - containerPort: 8080 env: - name: CROSSPLANE_API_URL value: "[***]" # Crossplane API 内部服务地址 - name: LOG_LEVEL value: "info" - name: FUNCTIONS_DIR value: "/functions" volumeMounts: - name: functions-volume mountPath: /functions # 挂载函数代码目录 volumes: - name: functions-volume configMap: name: crossplane-functions # 包含函数代码的 ConfigMap(需提前创建)
运行器支持以下函数加载方式,通过 FUNCTION_LOAD_MODE 环境变量指定(默认 local):
local:加载本地目录(FUNCTIONS_DIR)中的函数文件(二进制/Wasm)http:从远程 HTTP 服务拉取函数(需配置 FUNCTION_HTTP_URL 环境变量)secret:从 Kubernetes Secret 中加载(需挂载 Secret 到 FUNCTIONS_DIR)| 参数名 | 说明 | 类型 | 默认值 |
|---|---|---|---|
--log-level | 日志级别(DEBUG/INFO/WARN/ERROR) | string | info |
--listen-addr | 运行器监听地址(格式:IP:端口) | string | 0.0.0.0:8080 |
--functions-dir | 函数代码存放目录 | string | /functions |
--debug | 启用调试模式(打印详细请求/响应日志) | bool | false |
| 变量名 | 说明 | 必填 | 默认值 |
|---|---|---|---|
CROSSPLANE_API_URL | Crossplane API 地址(格式:https://<host>:<port>) | 是 | - |
LOG_LEVEL | 日志级别(优先级高于命令行 --log-level) | 否 | info |
LISTEN_ADDR | 运行器监听地址(优先级高于命令行 --listen-addr) | 否 | 0.0.0.0:8080 |
FUNCTIONS_DIR | 函数代码存放目录(优先级高于命令行 --functions-dir) | 否 | /functions |
FUNCTION_LOAD_MODE | 函数加载方式(local/http/secret) | 否 | local |
FUNCTION_HTTP_URL | 当 FUNCTION_LOAD_MODE=http 时,远程函数拉取地址 | 否 | - |
DEBUG_MODE | 启用调试模式(true/false,优先级高于命令行 --debug) | 否 | false |
CROSSPLANE_TIMEOUT | 与 Crossplane API 通信的超时时间(单位:秒) | 否 | 30 |
通过 docker-compose 快速搭建本地测试环境(含 Crossplane 控制平面模拟,实际场景需对接真实 Crossplane):
yamlversion: "3.8" services: function-runner: image: crossplane-function-runner:latest container_name: crossplane-function-runner ports: - "8080:8080" volumes: - ./local-functions:/functions # 本地函数代码目录(存放 test-function.wasm 或二进制) environment: - CROSSPLANE_API_URL=[***] # 对接模拟的 Crossplane API 服务 - LOG_LEVEL=debug # 开启调试日志 - DEBUG_MODE=true - FUNCTION_LOAD_MODE=local depends_on: - crossplane-api-mock # 模拟 Crossplane API 的服务(实际环境移除) crossplane-api-mock: image: nginx:alpine # 仅用于模拟 API 服务,实际环境替换为真实 Crossplane API container_name: crossplane-api-mock ports: - "443:443" volumes: - ./mock-api-cert:/etc/nginx/certs # 模拟 HTTPS 证书 - ./mock-api-config:/etc/nginx/conf.d # 模拟 API 响应配置
livenessProbe/readinessProbe,检查 http://localhost:8080/health 端点)FUNCTION_LOAD_MODE=http 动态拉取(需函数支持热加载)manifest unknown 错误
TLS 证书验证失败
DNS 解析超时
410 错误:版本过低
402 错误:流量耗尽
身份认证失败错误
429 限流错误
凭证保存错误
来自真实用户的反馈,见证轩辕镜像的优质服务