HTTP Trigger
提供外部以 HTTP 方式存取 Function
讓外部可以使用 HTTP 存取 Function
如何建立 HTTP Trigger
以下說明將使用社群版本的 Ingress-NGINX Controller 作為示範。如果您使用其他的 Ingress Controller,請參考其文件。
路徑
使用 --path=<path>=<path-type>=<fn-name>=<port-number>
來設定要比對的 URL 路徑以及將流量送往 Function 埠號 (建立 HTTP Trigger 之前必須設定 Function 開放埠號。
路徑匹配
在生產環境中請勿建立沒有指定任何主機或是域名且使用路徑 /
的 HTTP Trigger,這將導致所有流量都被送往該指定的 Function。
以下指令將匹配路徑 /
的流量送往 Function hello
,並且設定 Ingress Class 為 nginx
# Demo only, do NOT create an http trigger with root path like this in production.
syntixi httptrigger create --name hello --path="/"=Prefix=hello=80 --ingress-class=nginx
存取 Ingress Controller 的 LoadBalancer IP 並測試 Function 是否正常運作
INGRESS_SERVICE_LOAD_BALANCER_IP=$(kubectl -n ingress-nginx get svc ingress-nginx-controller -o jsonpath='{...ip}')
curl http://${INGRESS_SERVICE_LOAD_BALANCER_IP}/
路徑類型
每個路徑都需要有對應的路徑類型來做匹配。
syntixi httptrigger create --name hello --path="/foo/bar"=Exact=hello=80
以下為二種支援的路徑類型:
Exact
: 精確的匹配並且會區分大小寫Prefix
: 根據 URL 路徑前綴(以 / 分隔)進行匹配,匹配會區分大小寫並且對路徑中的元素逐個比對完成
Path Type | Path(s) | Request path(s) | Matches? |
---|---|---|---|
Exact | /foo | /foo | Yes |
Exact | /foo | /foo/ | No |
Prefix | / | (all paths) | Yes |
Prefix | /foo | /foo, /foo/ | Yes |
Prefix | /foo/ | /foo, /foo/ | Yes |
Prefix | /foo/ | /foo | Yes, ignores trailing slash |
Prefix | /foo/ | /foo/ | Yes, matches trailing slash |
Prefix | /aaa/bbb | /aaa/bbb/ccc | Yes, matches subpath |
Prefix | /aaa/bbb | /aaa/bbbxyz | No, does not match string prefix |
Mixed | /foo (Prefix), /foo (Exact) | /foo | Yes, prefers Exact |
Host
我們強烈建議使用 HTTP Trigger 時要指定,這樣可以避免多個使用相同 URL 路徑的 Function 時發生衝突。
使用 --host
參數來指定 HTTP Trigger 目的主機或是域名
syntixi ht create --name hello --path="/"=Exact=hello=80 --host example.com
curl -H 'Host: example.com' http://${INGRESS_SERVICE_LOAD_BALANCER_IP}/
TLS
在繼續之前,您需要一個 TLS Config,請到 Config 來瞭解如何建立。
使用 --tls
參數指定要使用的 TLS Config,這邊的範例假設您已使用 tls-cfg 為名建立 TLS config
syntixi ht create --name hello --path="/"=Exact=hello=80 --host example.com --tls tls-cfg
curl --insecure -H 'Host: example.com' http://${INGRESS_SERVICE_LOAD_BALANCER_IP}/
支援的 Ingress Controller
Syntixi 使用 Kubernetes ingress 來實現終止 TLS 以及路徑匹配,未來將支援 Gateway API 以提供更多功能。