Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
@@ -1,14 +1,18 @@
# SPDX-FileCopyrightText: Copyright (c) 2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved.
# SPDX-License-Identifier: Apache-2.0

# Temporal client TLS certs for site-agent — placeholder values populated by bootstrap
# Temporal client TLS certs for site-agent — placeholder values populated by bootstrap.
# resource-policy: keep prevents helm upgrade from overwriting certs written by the
# bootstrap process; deleting and re-installing the release creates a fresh placeholder.
Comment thread
coderabbitai[bot] marked this conversation as resolved.
apiVersion: v1
kind: Secret
metadata:
name: {{ .Values.secrets.temporalClientCerts }}
namespace: {{ include "nico-rest-site-agent.namespace" . }}
labels:
{{- include "nico-rest-site-agent.labels" . | nindent 4 }}
annotations:
helm.sh/resource-policy: keep
type: Opaque
stringData:
otp: ""
Expand Down
2 changes: 2 additions & 0 deletions helm/rest/nico-rest-site-agent/values.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -82,6 +82,8 @@ envConfig:
ENABLE_TLS: "true"
NICO_ADDRESS: ""
NICO_SEC_OPT: "0"
FLOW_GRPC_ENABLED: "false"

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

I believe this needs to be true so that the site agent can make gRPC calls to flow. It is set to true in forged/env/ytl-shard-1/site/site-agent/config.properties.

FLOW_GRPC_SEC_OPT: "2"
CLUSTER_ID: ""
TEMPORAL_HOST: "temporal-frontend.temporal"
TEMPORAL_PORT: "7233"
Expand Down
14 changes: 12 additions & 2 deletions rest-api/site-workflow/pkg/grpc/client/flow_client.go
Original file line number Diff line number Diff line change
Expand Up @@ -158,9 +158,19 @@ func NewFlowGrpcClient(config *FlowGrpcClientConfig) (client *FlowGrpcClient, er
if !capool.AppendCertsFromPEM(cabytes) {
return nil, fmt.Errorf("FlowGrpcClient: Failed to append CA cert to CA pool")
}
// Use GetClientCertificate (not Certificates) to unconditionally present
// the client cert. With Certificates, Go's TLS stack only selects a cert
// whose issuer matches the acceptable CA list from the server's
// CertificateRequest; when no match is found it silently sends no cert,
// causing the server to reject with "tls: certificate required".
// GetClientCertificate bypasses that matching and always returns the cert,
// leaving verification to the server — the same approach used in
// rest-api/flow/pkg/certs/certs.go TLSConfig().
mutualTLSConfig := &tls.Config{
Certificates: []tls.Certificate{clientCert},
RootCAs: capool,
GetClientCertificate: func(*tls.CertificateRequestInfo) (*tls.Certificate, error) {
return &clientCert, nil
},
RootCAs: capool,
}
creds := credentials.NewTLS(mutualTLSConfig)

Expand Down
Loading