Repository navigation
v0.4.0
rproxy-gateway の最初のリリース。Kubernetes の Gateway API のリソースを rproxy のルールにして、rproxy の制御 API で反映するコントローラ。
追加
- Gateway API v1.6:Gateway、HTTPRoute、GRPCRoute、TLSRoute(Passthrough / Terminate)、TCPRoute、UDPRoute、ReferenceGrant、ListenerSet、BackendTLSPolicy。
- conformance(v1.6.3)は、GATEWAY-HTTP・GRPC・TLS・TCP・UDP の 5 つのプロファイルで core がすべて通る。名乗っている extended の機能(HTTPRoute の拡張、static addresses、infrastructure、クライアント証明書の検証など)もすべて通る。
- 結果は docs/CONFORMANCE.md に。
- 2 つの動かし方
- managed(既定):Gateway ごとに、Gateway の namespace に rproxy の Deployment と Service を作る。Gateway ごとに制御 API の証明書とトークンを分ける。
- fleet:先に置いた rproxy の DaemonSet(hostNetwork)がすべての Gateway を受け持つ。1 つの信頼の範囲のためのもの。
- コントローラの冗長化:Lease でリーダーを選ぶ。chart の既定は 2 レプリカ。
- Ingress・Traefik の CRD からの移行(
--migrate-to):Ingress と IngressRoute・IngressRouteTCP・IngressRouteUDP・Middleware・TLSOption を、Gateway のルールセットに読み込む。 - rproxy の CRD:RproxyMiddleware(ExtensionRef で使う rproxy のミドルウェア)、RproxyPolicy(L4 の制限・帯域・GeoIP など)、RproxyRule(rproxy のルールそのもの)。
- 安全側の既定
- rproxy の Pod は Kubernetes の API を使わない。証明書はマウントした Secret で受け取る。
spec.addresses・ExternalName の Service・移行でのほかの namespace への参照は、どれも既定で使えない。- Gateway ごとに NetworkPolicy を作る。
--watch-namespacesで権限を namespace ごとの Role に絞れる。- 詳しくは docs/SECURITY.md。
- 配布物
- Helm chart:
oci://ghcr.io/max3584/charts/rproxy-gateway - イメージ:
ghcr.io/max3584/rproxy-gateway:0.4.0(コントローラ)、ghcr.io/max3584/rproxy-gateway/rproxy:0.4.0(rproxy)
- Helm chart:
変更
- rproxy v0.4.0 以降が要る(ルールセットと、Gateway API 向けの機能のため)。
- TCPRoute・UDPRoute と HTTPRoute の retry は、Gateway API の experimental channel の CRD(
experimental-install.yaml)が要る。standard の CRD では、これらのリソースと retry の欄がない。
入れ方
kubectl apply --server-side -f https://github.com/kubernetes-sigs/gateway-api/releases/download/v1.6.3/experimental-install.yaml
helm install rproxy-gateway oci://ghcr.io/max3584/charts/rproxy-gateway -n rproxy-gateway-system --create-namespacerproxy-api: rproxy-api v0.4.0 · UI: TCP-UDP-rproxy-ui v0.4.0
The first release of rproxy-gateway: a controller that turns Kubernetes Gateway API resources into rproxy rules and applies them through rproxy's control API.
Added
- Gateway API v1.6: Gateway, HTTPRoute, GRPCRoute, TLSRoute (Passthrough / Terminate), TCPRoute, UDPRoute, ReferenceGrant, ListenerSet, BackendTLSPolicy.
- Conformance (v1.6.3) passes every core test in the five profiles GATEWAY-HTTP, GRPC, TLS, TCP and UDP. Every claimed extended feature passes too (HTTPRoute extensions, static addresses, infrastructure, client certificate validation, and more).
- Results are in docs/en/CONFORMANCE.md.
- Two ways to run
- managed (default): one rproxy Deployment and Service per Gateway, in the Gateway's namespace, each with its own control API certificate and token.
- fleet: an rproxy DaemonSet deployed beforehand (hostNetwork) serves every Gateway. It is for one trust domain.
- A highly available controller: replicas elect a leader with a Lease (2 replicas by default in the chart).
- Migration from Ingress and Traefik CRDs (
--migrate-to): Ingress, IngressRoute, IngressRouteTCP, IngressRouteUDP, Middleware and TLSOption are read into a Gateway's rule set. - rproxy's CRDs: RproxyMiddleware (rproxy middlewares used through ExtensionRef), RproxyPolicy (L4 limits, bandwidth, GeoIP, and more), RproxyRule (rproxy rules verbatim).
- Safe defaults
- rproxy pods do not use the Kubernetes API; certificates come as a mounted Secret.
spec.addresses, ExternalName Services and cross-namespace references in migration are all off by default.- A NetworkPolicy is made per Gateway.
--watch-namespacesnarrows the controller's permissions to per-namespace Roles.- Details are in docs/en/SECURITY.md.
- Artifacts
- Helm chart:
oci://ghcr.io/max3584/charts/rproxy-gateway - Images:
ghcr.io/max3584/rproxy-gateway:0.4.0(controller),ghcr.io/max3584/rproxy-gateway/rproxy:0.4.0(rproxy)
- Helm chart:
Changed
- Requires rproxy v0.4.0 or later (rule sets and the Gateway API features).
- TCPRoute, UDPRoute and HTTPRoute retries need Gateway API's experimental channel CRDs (
experimental-install.yaml); the standard CRDs lack those resources and the retry field.
Installing
kubectl apply --server-side -f https://github.com/kubernetes-sigs/gateway-api/releases/download/v1.6.3/experimental-install.yaml
helm install rproxy-gateway oci://ghcr.io/max3584/charts/rproxy-gateway -n rproxy-gateway-system --create-namespacerproxy-api: rproxy-api v0.4.0 · UI: TCP-UDP-rproxy-ui v0.4.0