NETOBSERV-2977: Add TLS support for collector when OpenShift - #552
NETOBSERV-2977: Add TLS support for collector when OpenShift#552leandroberetta wants to merge 7 commits into
Conversation
|
@leandroberetta: This pull request references NETOBSERV-2515 which is a valid jira issue. Warning: The referenced jira issue has an invalid target version for the target branch this PR targets: expected the epic to target either version "5.0.0." or "openshift-5.0.0.", but it targets "netobserv-2.0" instead. DetailsIn response to this:
Instructions for interacting with me using PR comments are available here. If you have questions or suggestions related to my behavior, please file an issue against the openshift-eng/jira-lifecycle-plugin repository. |
|
[APPROVALNOTIFIER] This PR is NOT APPROVED This pull-request has been approved by: The full list of commands accepted by this bot can be found here. DetailsNeeds approval from an approver in each of these files:Approvers can indicate their approval by writing |
| sigs.k8s.io/yaml v1.6.0 // indirect | ||
| ) | ||
|
|
||
| replace github.com/netobserv/flowlogs-pipeline => github.com/leandroberetta/flowlogs-pipeline v0.0.0-20260810170916-6c5c94ab0294 |
There was a problem hiding this comment.
Don't forget to remove this :)
There was a problem hiding this comment.
that deserve at least a unit test
| if [[ "$tlsEnabled" == "true" ]]; then | ||
| cmd="${K8S_CLI_BIN} run -n $namespace collector \\ | ||
| --image=$img --image-pull-policy='Always' --restart='Never' \\ | ||
| --override-type=strategic \\ | ||
| --overrides=$overrides \\ | ||
| --command -- $runCommand" | ||
| else | ||
| cmd="${K8S_CLI_BIN} run -n $namespace collector \\ | ||
| --image=$img --image-pull-policy='Always' --restart='Never' \\ | ||
| --overrides=$overrides \\ | ||
| --command -- $runCommand" | ||
| fi |
There was a problem hiding this comment.
| if [[ "$tlsEnabled" == "true" ]]; then | |
| cmd="${K8S_CLI_BIN} run -n $namespace collector \\ | |
| --image=$img --image-pull-policy='Always' --restart='Never' \\ | |
| --override-type=strategic \\ | |
| --overrides=$overrides \\ | |
| --command -- $runCommand" | |
| else | |
| cmd="${K8S_CLI_BIN} run -n $namespace collector \\ | |
| --image=$img --image-pull-policy='Always' --restart='Never' \\ | |
| --overrides=$overrides \\ | |
| --command -- $runCommand" | |
| fi | |
| overrideType="" | |
| if [[ "$tlsEnabled" == "true" ]]; then | |
| overrideType="--override-type=strategic" | |
| fi | |
| cmd="${K8S_CLI_BIN} run -n $namespace collector \ | |
| --image=$img --image-pull-policy='Always' --restart='Never' \ | |
| $overrideType --overrides=$overrides \ | |
| --command -- $runCommand" |
There was a problem hiding this comment.
We should simplify this to something like:
# Create collector service for flows/packets captures
if [[ "$command" = "flows" || "$command" = "packets" ]]; then
echo "creating collector service"
applyYAML "$collectorServiceYAML"
if [[ "$tlsEnabled" == "true" ]]; then
echo "creating CA configmap for TLS"
createCAConfigMap
fi
fi
if [ "$command" = "flows" ]; then
echo "creating flow-capture agents"
elif [ "$command" = "packets" ]; then
echo "creating packet-capture agents"
elif [ "$command" = "metrics" ]; then
echo "creating service monitor"
applyYAML "$smYAML"
echo "creating metric-capture agents:"
| function isOpenShift() { | ||
| ${K8S_CLI_BIN} get clusterversion version &>/dev/null | ||
| } |
There was a problem hiding this comment.
You should rely on checkClusterVersion here instead.
Feel free to add a global variable like isOCP in it for your usage 😉
| golang.org/x/tools v0.45.0 // indirect | ||
| google.golang.org/genproto/googleapis/rpc v0.0.0-20260526163538-3dc84a4a5aaa // indirect | ||
| google.golang.org/grpc v1.81.1 // indirect | ||
| google.golang.org/grpc v1.82.0 |
There was a problem hiding this comment.
It's a direct dependency now: collector_tls.go uses grpc.Creds(credentials.NewTLS(...)) to enable TLS on the collector, so grpc is imported directly rather than transitively.
f86c30c to
54b1101
Compare
|
@jpinsonneau I addressed the feedback, the only missing one is the dependency update, I'm waiting to merge this: netobserv/flowlogs-pipeline#1297 |
47414b5 to
565fb2e
Compare
|
@leandroberetta: This pull request references NETOBSERV-2515 which is a valid jira issue. Warning: The referenced jira issue has an invalid target version for the target branch this PR targets: expected the epic to target either version "5.1.0." or "openshift-5.1.0.", but it targets "netobserv-2.0" instead. DetailsIn response to this:
Instructions for interacting with me using PR comments are available here. If you have questions or suggestions related to my behavior, please file an issue against the openshift-eng/jira-lifecycle-plugin repository. |
The gRPC connection between the capture agent (FLP client) and the CLI collector (gRPC server) hardcoded MinVersion: TLS 1.3 on both ends. Every other netobserv component derives its TLS settings from the OpenShift tlsSecurityProfile (apiservers.config.openshift.io/cluster); the CLI now does the same instead of pinning a version. A new `resolve-tls` subcommand runs as an initContainer on the collector pod. It reads the cluster's tlsSecurityProfile, resolves it to concrete min version / cipher suites / curves (falling back to the Intermediate preset when no profile is set, mirroring the operator's default), and writes them into the `collector-tls-config` ConfigMap. Both the collector container and the agent DaemonSet consume that ConfigMap via envFrom, so a single resolver run drives both ends. The collector server applies the resolved settings through flowlogs-pipeline's tlsprofile.Apply. Because the ConfigMap only exists once the collector's init completes, the install order flips on the TLS path: the collector is created and waited on first, then the agents (which reference the ConfigMap with optional:false, failing loudly rather than silently downgrading TLS). This path stays OpenShift-only and applies to flows/packets captures; metrics, --yaml output and non-OCP runs are unchanged. - internal/pkg/tlsresolver: profile resolution + ConfigMap write, with tests - cmd/resolve_tls.go, cmd/root.go: new resolve-tls subcommand - cmd/collector_tls.go: drop hardcoded TLS 1.3, apply resolved profile - res/service-account.yml: RBAC to read apiservers/cluster and write the CM - commands/netobserv, scripts/functions.sh: initContainer, envFrom, ordering - go.mod: add openshift/api and openshift/library-go/pkg/crypto Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
fd8151c to
8956222
Compare
|
@leandroberetta: This pull request references NETOBSERV-2977 which is a valid jira issue. Warning: The referenced jira issue has an invalid target version for the target branch this PR targets: expected the story to target the "5.1.0" version, but no target version was set. DetailsIn response to this:
Instructions for interacting with me using PR comments are available here. If you have questions or suggestions related to my behavior, please file an issue against the openshift-eng/jira-lifecycle-plugin repository. |
The TLS profile resolver maps the OpenShift SecP256r1MLKEM768 / SecP384r1MLKEM1024 groups to their crypto/tls.CurveID constants, which are Go 1.26+. CI (setup-go 1.26), the Dockerfile builder (golang:1.26) and the operator (go 1.26.3) are already on 1.26; only the go.mod directive lagged at 1.25.7, which made govet's stdversion reject those constants and the exhaustive linter reject dropping them. Bump the directive to 1.26.0. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
agentManifest is set in functions.sh setup() but consumed in commands/netobserv (applied after the collector is ready). shellcheck analyzes each file in isolation, so it flags the assignment as unused; add the same disable directive the file already uses elsewhere. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Moving the resolve-tls initContainer's namespaced Role and RoleBinding to the end of res/service-account.yml keeps the existing service-account document indices stable, but still adds two documents to every generated capture manifest. Update the positional assertions in the flow, packet and metric YAML e2e tests accordingly: - bump the expected document counts (8 -> 10 for flows/packets, 12 -> 14 for metrics), - assert the new Role (configmaps get/create/update) at index [6] and RoleBinding (ServiceAccount -> Role netobserv-cli) at index [7], - assert the new config.openshift.io/apiservers get rule on the netobserv-cli ClusterRole, - shift the collector Service / DaemonSet and the metric-specific documents to their new indices. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
|
@leandroberetta: The following test failed, say
Full PR test history. Your PR dashboard. DetailsInstructions for interacting with me using PR comments are available here. If you have questions or suggestions related to my behavior, please file an issue against the kubernetes-sigs/prow repository. I understand the commands that are listed here. |
|
PR needs rebase. DetailsInstructions for interacting with me using PR comments are available here. If you have questions or suggestions related to my behavior, please file an issue against the kubernetes-sigs/prow repository. |
Description
Enable TLS for the collector↔agent gRPC connection when running on OpenShift, and make that connection honor the cluster's TLS security profile.
TLS enablement (service-ca)
Honor the cluster TLS security profile
Dependencies
n/a
Checklist