Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Backport of inject envoy_telemetry_bind_socket_dir proxy config when telemetry collector is enabled into release/1.0.x #2211

Closed
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
4 changes: 4 additions & 0 deletions .changelog/2143.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@

```release-note:feature
consul-telemetry-collector: Configure envoy proxy config during registration when consul-telemetry-collector is enabled.
```
1 change: 1 addition & 0 deletions charts/consul/templates/connect-inject-deployment.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -257,6 +257,7 @@ spec:
{{- if and .Values.global.tls.enabled .Values.global.tls.enableAutoEncrypt }}
-enable-auto-encrypt \
{{- end }}
-enable-telemetry-collector={{ .Values.global.metrics.enableTelemetryCollector}} \
startupProbe:
httpGet:
path: /readyz/ready
Expand Down
13 changes: 13 additions & 0 deletions charts/consul/test/unit/connect-inject-deployment.bats
Original file line number Diff line number Diff line change
Expand Up @@ -211,6 +211,19 @@ load _helpers
[ "${actual}" = "true" ]
}

@test "connectInject/Deployment: metrics.enableTelemetryCollector can be configured" {
cd `chart_dir`
local cmd=$(helm template \
-s templates/connect-inject-deployment.yaml \
--set 'connectInject.enabled=true' \
--set 'connectInject.metrics.enableTelemetryCollector=true' \
. | tee /dev/stderr |
yq '.spec.template.spec.containers[0].command' | tee /dev/stderr)

local actual=$(echo "$cmd" |
yq 'any(contains("-enable-telemetry-collector=true"))' | tee /dev/stderr)
[ "${actual}" = "true" ]
}
#--------------------------------------------------------------------
# consul and consul-dataplane images

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -42,9 +42,10 @@ const (
terminatingGateway = "terminating-gateway"
ingressGateway = "ingress-gateway"

kubernetesSuccessReasonMsg = "Kubernetes health checks passing"
envoyPrometheusBindAddr = "envoy_prometheus_bind_addr"
defaultNS = "default"
kubernetesSuccessReasonMsg = "Kubernetes health checks passing"
envoyPrometheusBindAddr = "envoy_prometheus_bind_addr"
envoyTelemetryCollectorBindSocketDir = "envoy_telemetry_collector_bind_socket_dir"
defaultNS = "default"

// clusterIPTaggedAddressName is the key for the tagged address to store the service's cluster IP and service port
// in Consul. Note: This value should not be changed without a corresponding change in Consul.
Expand Down Expand Up @@ -117,6 +118,10 @@ type Controller struct {
// to Consul client agents.
EnableAutoEncrypt bool

// EnableTelemetryCollector controls whether the proxy service should be registered
// with config to enable telemetry forwarding.
EnableTelemetryCollector bool

MetricsConfig metrics.Config
Log logr.Logger

Expand Down Expand Up @@ -472,6 +477,10 @@ func (r *Controller) createServiceRegistrations(pod corev1.Pod, serviceEndpoints
proxyConfig.Config[envoyPrometheusBindAddr] = prometheusScrapeListener
}

if r.EnableTelemetryCollector {
proxyConfig.Config[envoyTelemetryCollectorBindSocketDir] = "/consul/connect-inject"
}

if consulServicePort > 0 {
proxyConfig.LocalServiceAddress = "127.0.0.1"
proxyConfig.LocalServicePort = consulServicePort
Expand Down Expand Up @@ -751,6 +760,10 @@ func (r *Controller) createGatewayRegistrations(pod corev1.Pod, serviceEndpoints
}
}

if r.EnableTelemetryCollector {
service.Proxy.Config[envoyTelemetryCollectorBindSocketDir] = "/consul/service"
}

serviceRegistration := &api.CatalogRegistration{
Node: common.ConsulNodeNameFromK8sNode(pod.Spec.NodeName),
Address: pod.Status.HostIP,
Expand Down
6 changes: 6 additions & 0 deletions control-plane/subcommand/inject-connect/command.go
Original file line number Diff line number Diff line change
Expand Up @@ -110,6 +110,9 @@ type Command struct {

flagEnableAutoEncrypt bool

// Consul telemetry collector
flagEnableTelemetryCollector bool

// Consul DNS flags.
flagEnableConsulDNS bool
flagResourcePrefix string
Expand Down Expand Up @@ -193,6 +196,8 @@ func (c *Command) init() {
"Enables updating the CABundle on the webhook within this controller rather than using the web cert manager.")
c.flagSet.BoolVar(&c.flagEnableAutoEncrypt, "enable-auto-encrypt", false,
"Indicates whether TLS with auto-encrypt should be used when talking to Consul clients.")
c.flagSet.BoolVar(&c.flagEnableTelemetryCollector, "enable-telemetry-collector", false,
"Indicates whether proxies should be registered with configuration to enable forwarding metrics to consul-telemetry-collector")
c.flagSet.StringVar(&c.flagLogLevel, "log-level", zapcore.InfoLevel.String(),
fmt.Sprintf("Log verbosity level. Supported values (in order of detail) are "+
"%q, %q, %q, and %q.", zapcore.DebugLevel.String(), zapcore.InfoLevel.String(), zapcore.WarnLevel.String(), zapcore.ErrorLevel.String()))
Expand Down Expand Up @@ -439,6 +444,7 @@ func (c *Command) Run(args []string) int {
ReleaseName: c.flagReleaseName,
ReleaseNamespace: c.flagReleaseNamespace,
EnableAutoEncrypt: c.flagEnableAutoEncrypt,
EnableTelemetryCollector: c.flagEnableTelemetryCollector,
Context: ctx,
}).SetupWithManager(mgr); err != nil {
setupLog.Error(err, "unable to create controller", "controller", endpoints.Controller{})
Expand Down