Skip to content

feat(epp): add --tls-min-version and --tls-cipher-suites flags - #2230

Merged
elevran merged 1 commit into
llm-d:mainfrom
andresllh:feat/tls-min-version-cipher-suites
Jul 30, 2026
Merged

feat(epp): add --tls-min-version and --tls-cipher-suites flags#2230
elevran merged 1 commit into
llm-d:mainfrom
andresllh:feat/tls-min-version-cipher-suites

Conversation

@andresllh

@andresllh andresllh commented Jul 29, 2026

Copy link
Copy Markdown
Contributor

What type of PR is this?
/kind feature

What this PR does / why we need it:

Adds two new CLI flags to the EPP (Endpoint Picker) for configuring TLS
minimum version and cipher suites on the ext_proc gRPC server:

  • --tls-min-version — accepts Go crypto/tls version constant names
    (e.g., VersionTLS12, VersionTLS13)
  • --tls-cipher-suites — accepts a comma-separated list of Go crypto/tls
    cipher suite names (e.g., TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256).
    Only effective for TLS 1.2 and below; TLS 1.3 cipher suites are fixed
    by the Go standard library and not configurable via this flag.

These flags allow cluster administrators to enforce a TLS security profile
on the llm-d-router's gRPC server, aligning with platform-level TLS policies
(e.g., OpenShift's cluster-wide TLS profile).

The parsed values are applied to both TLS config paths (static cert and
cert-reload) via an extracted applyTLSOverrides method, with dedicated
unit tests in tls_test.go.

Companion PR: kserve/kserve#5924 (adds template
variables to pass these flags from the KServe config system).

Which issue(s) this PR fixes:
Fixes #2239

Release note:

Added --tls-min-version and --tls-cipher-suites CLI flags to llm-d-router for configuring TLS security profile on the ext_proc gRPC server. Note: --tls-cipher-suites only applies to TLS 1.2 and below; TLS 1.3 cipher suites are fixed by Go's crypto/tls and not configurable.

@andresllh
andresllh requested review from a team, kaushikmitr, liu-cong and vMaroon as code owners July 29, 2026 22:11
@github-actions github-actions Bot added kind/feature Categorizes issue or PR as related to a new feature. size/XL Denotes a PR that changes 500-999 lines, ignoring generated files. labels Jul 29, 2026
@github-actions

Copy link
Copy Markdown
Contributor

🚨 Unsigned commits detected! Please sign your commits.

For instructions on how to set up GPG/SSH signing and verify your commits, please see GitHub Documentation.

@andresllh
andresllh force-pushed the feat/tls-min-version-cipher-suites branch from b6aa11f to 0b85825 Compare July 29, 2026 22:21
@github-actions github-actions Bot added size/L Denotes a PR that changes 100-499 lines, ignoring generated files. and removed size/XL Denotes a PR that changes 500-999 lines, ignoring generated files. labels Jul 29, 2026
@andresllh
andresllh force-pushed the feat/tls-min-version-cipher-suites branch 2 times, most recently from eda01cf to 77946a7 Compare July 30, 2026 12:54
@github-actions github-actions Bot added kind/feature Categorizes issue or PR as related to a new feature. and removed kind/feature Categorizes issue or PR as related to a new feature. labels Jul 30, 2026
@zdtsw

zdtsw commented Jul 30, 2026

Copy link
Copy Markdown
Member

i think in general this will work, basically the idea is to put the responsiblity on the one who creates router deployment to choose values that are both valid and compatible.

just food for thought:

  • wrong TLS version fails fast (pod crash on startup), so that case is safe.
  • incompatible cipher is fuzzier, depends on whether the gateway is fail open or closed, and in the worst
    case the request bypasses the router entirely and falls back to round-robin.

@elevran elevran left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Clean, well-tested addition - thanks!
Minor doc update before this merges.

Comment thread pkg/epp/server/options.go Outdated
fs.StringVar(&opts.TLSMinVersion, "tls-min-version", opts.TLSMinVersion,
"Minimum TLS version for secure serving (e.g., VersionTLS12, VersionTLS13).")
fs.StringSliceVar(&opts.TLSCipherSuites, "tls-cipher-suites", opts.TLSCipherSuites,
"Comma-separated list of TLS cipher suites for secure serving (Go crypto/tls names, e.g., TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256).")

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Go's crypto/tls only honors CipherSuites for TLS 1.2 and below; TLS 1.3 suites are fixed and not configurable here. If an admin sets --tls-min-version=VersionTLS12 alongside a restrictive --tls-cipher-suites list, a client can still negotiate TLS 1.3 with suites outside that list, so the cipher restriction is silently not enforced on 1.3 connections.

  • Worth a one-line callout in the help text given the stated goal of enforcing a platform TLS profile.
  • Update to release-note in PR description to make this more explicit on release

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Done — updated both:

  • Flag help text: --tls-cipher-suites now reads: "Only effective for TLS 1.2 and below; TLS 1.3 cipher suites are not configurable."
  • Release note: Added the same caveat: "Note: --tls-cipher-suites only applies to TLS 1.2 and below; TLS 1.3 cipher suites are fixed by Go's crypto/tls and not configurable."

@elevran elevran self-assigned this Jul 30, 2026
Add CLI flags to configure TLS minimum version and cipher suites on
the ext_proc gRPC server. Values are parsed from Go crypto/tls constant
names (e.g., VersionTLS12, TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) and
applied to both cert-reload and static-cert TLS config paths.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Signed-off-by: Andres Llausas <allausas@redhat.com>
@github-actions github-actions Bot added kind/feature Categorizes issue or PR as related to a new feature. and removed kind/feature Categorizes issue or PR as related to a new feature. labels Jul 30, 2026
@andresllh
andresllh force-pushed the feat/tls-min-version-cipher-suites branch from 7a37991 to b0c6f63 Compare July 30, 2026 15:57
@github-actions github-actions Bot added kind/feature Categorizes issue or PR as related to a new feature. and removed kind/feature Categorizes issue or PR as related to a new feature. labels Jul 30, 2026

@zdtsw zdtsw left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM, thanks

@elevran
elevran enabled auto-merge (squash) July 30, 2026 16:58
@elevran
elevran merged commit 66f9894 into llm-d:main Jul 30, 2026
38 of 39 checks passed
elevran pushed a commit that referenced this pull request Jul 30, 2026
Signed-off-by: llm-d-router-release-notes[bot] <287676111+llm-d-router-release-notes[bot]@users.noreply.github.com>
Co-authored-by: llm-d-router-release-notes[bot] <287676111+llm-d-router-release-notes[bot]@users.noreply.github.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

kind/feature Categorizes issue or PR as related to a new feature. size/L Denotes a PR that changes 100-499 lines, ignoring generated files.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Support TLS min-version and cipher-suites configuration on EPP gRPC server

3 participants