函数入口
有几种方法可以访问同步函数。我们将在以下部分详细说明。
本文档假设你正在使用默认的 OpenFunction 网关 并且你有一个名为
function-sample
的同步函数。
从集群内部访问函数
通过内部地址访问函数
OpenFunction 会为每个同步 Function
创建此服务:{{.Name}}.{{.Namespace}}.svc.cluster.local
。此服务将用于提供函数的内部地址。
通过运行以下命令获取 Function
内部地址:
export FUNC_INTERNAL_ADDRESS=$(kubectl get function function-sample -o=jsonpath='{.status.addresses[?(@.type=="Internal")].value}')
这个地址提供了在集群内部访问函数的默认方法,适合用作 EventSource
的 sink.url
。
在 pod 中使用 curl 访问 Function
:
kubectl run --rm ofn-test -i --tty --image=radial/busyboxplus:curl -- curl -sv $FUNC_INTERNAL_ADDRESS
从集群外部访问函数
通过 Kubernetes 网关的 IP 地址访问函数
获取 Kubernetes 网关的 ip 地址:
export IP=$(kubectl get node -l "! node.kubernetes.io/exclude-from-external-load-balancers" -o=jsonpath='{.items[0].status.addresses[?(@.type=="InternalIP")].address}')
获取函数的 HOST 和 PATH:
export FUNC_HOST=$(kubectl get function function-sample -o=jsonpath='{.status.route.hosts[0]}')
export FUNC_PATH=$(kubectl get function function-sample -o=jsonpath='{.status.route.paths[0].value}')
直接使用 curl 访问 Function
:
curl -sv -HHOST:$FUNC_HOST http://$IP$FUNC_PATH
通过外部地址访问函数
要通过外部地址访问同步函数,你需要先配置 DNS。Magic DNS 或真实 DNS 都可以:
Magic DNS
获取 Kubernetes 网关的 ip 地址:
export IP=$(kubectl get node -l "! node.kubernetes.io/exclude-from-external-load-balancers" -o=jsonpath='{.items[0].status.addresses[?(@.type=="InternalIP")].address}')
用 Magic DNS 替换 OpenFunction 网关中定义的域:
export DOMAIN="$IP.sslip.io" kubectl patch gateway.networking.openfunction.io/openfunction -n openfunction --type merge --patch '{"spec": {"domain": "'$DOMAIN'"}}'
然后,你可以在
Function
的状态字段中看到Function
外部地址:kubectl get function function-sample -oyaml
status: addresses: - type: External value: http://function-sample.default.172.31.73.53.sslip.io/ - type: Internal value: http://function-sample.default.svc.cluster.local/ build: resourceHash: "14903236521345556383" state: Skipped route: conditions: - message: Valid HTTPRoute reason: Valid status: "True" type: Accepted hosts: - function-sample.default.172.31.73.53.sslip.io - function-sample.default.svc.cluster.local paths: - type: PathPrefix value: / serving: lastSuccessfulResourceRef: serving-t56fq resourceHash: "2638289828407595605" resourceRef: serving-t56fq service: serving-t56fq-ksvc-bv8ng state: Running
Real DNS
如果你有一个外部 IP 地址,你可以配置一个通配符 A 记录作为你的域:
# 这里 example.com 是 OpenFunction 网关中定义的域 *.example.com == A <external-ip>
如果你有一个 CNAME,你可以配置一个 CNAME 记录作为你的域:
# 这里 example.com 是 OpenFunction 网关中定义的域 *.example.com == CNAME <external-name>
用你上面配置的域替换 OpenFunction 网关中定义的域:
export DOMAIN="example.com" kubectl patch gateway.networking.openfunction.io/openfunction -n openfunction --type merge --patch '{"spec": {"domain": "'$DOMAIN'"}}'
然后,你可以在
Function
的状态字段中看到Function
外部地址:kubectl get function function-sample -oyaml
status: addresses: - type: External value: http://function-sample.default.example.com/ - type: Internal value: http://function-sample.default.svc.cluster.local/ build: resourceHash: "14903236521345556383" state: Skipped route: conditions: - message: Valid HTTPRoute reason: Valid status: "True" type: Accepted hosts: - function-sample.default.example.com - function-sample.default.svc.cluster.local paths: - type: PathPrefix value: / serving: lastSuccessfulResourceRef: serving-t56fq resourceHash: "2638289828407595605" resourceRef: serving-t56fq service: serving-t56fq-ksvc-bv8ng state: Running
然后,你可以通过运行以下命令获取 Function
外部地址:
export FUNC_EXTERNAL_ADDRESS=$(kubectl get function function-sample -o=jsonpath='{.status.addresses[?(@.type=="External")].value}')
现在,你可以直接使用 curl 访问 Function
:
curl -sv $FUNC_EXTERNAL_ADDRESS
Feedback
Was this page helpful?
Glad to hear it! Please tell us how we can improve.
Sorry to hear that. Please tell us how we can improve.