Skip to content

v0.4.0

Choose a tag to compare

@github-actions github-actions released this 07 Oct 17:30
· 154 commits to main since this release
8b1f1cf

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)

変更

  • 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-namespace

rproxy-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-namespaces narrows 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)

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-namespace

rproxy-api: rproxy-api v0.4.0 · UI: TCP-UDP-rproxy-ui v0.4.0