istio/istio · error

address is required

Error message

address is required

What it means

Lightstep tracer validation in agent config validation: `ValidateLightstepCollector` requires `meshConfig.defaultConfig.tracing.lightstep.address` to be non-empty before it even attempts `ValidateProxyAddress` on it. Lightstep is deprecated (the source marks it so upstream) but still validated; an absent address means the agent cannot ship spans. Note the companion check: an empty address also fails `ValidateProxyAddress` in the next line, so you can see both errors appended.

Source

Thrown at pkg/config/validation/agent/validation.go:259

		return fmt.Errorf("port (%s) is not a number: %v", p, err)
	}
	if err = ValidatePort(port); err != nil {
		return err
	}
	if err = ValidateFQDN(hostname); err != nil {
		if !netutil.IsValidIPAddress(hostname) {
			return fmt.Errorf("%q is not a valid hostname or an IP address", hostname)
		}
	}

	return nil
}

// ValidateLightstepCollector validates the configuration for sending envoy spans to LightStep
func ValidateLightstepCollector(ls *meshconfig.Tracing_Lightstep) error {
	var errs error
	if ls.GetAddress() == "" {
		errs = multierror.Append(errs, errors.New("address is required"))
	}
	if err := ValidateProxyAddress(ls.GetAddress()); err != nil {
		errs = multierror.Append(errs, multierror.Prefix(err, "invalid lightstep address:"))
	}
	if ls.GetAccessToken() == "" {
		errs = multierror.Append(errs, errors.New("access token is required"))
	}
	return errs
}

// ValidateZipkinCollector validates the configuration for sending envoy spans to Zipkin
func ValidateZipkinCollector(z *meshconfig.Tracing_Zipkin) error {
	return ValidateProxyAddress(strings.Replace(z.GetAddress(), "$(HOST_IP)", "127.0.0.1", 1))
}

// ValidateDatadogCollector validates the configuration for sending envoy spans to Datadog
func ValidateDatadogCollector(d *meshconfig.Tracing_Datadog) error {
	// If the address contains $(HOST_IP), replace it with a valid IP before validation.

View on GitHub (pinned to 8dc789c5cf)

Solutions

  1. Set a full host:port address, e.g. `lightstep.address: collector.lightstep.com:443` (or your ServiceNow/Lightstep collector).
  2. Since Lightstep is deprecated, prefer zipkin/otel collector unless you must keep it.
  3. Validate the whole meshConfig (`pilot` will re-validate on startup — check istiod logs for the aggregated multierror list).

Example fix

# before
defaultConfig:
  tracing:
    lightstep:
      accessToken: <token>
# address is required

# after
defaultConfig:
  tracing:
    lightstep:
      address: collector.lightstep.com:443
      accessToken: <token>
Defensive patterns

Strategy: validation

Validate before calling

// Go: check Lightstep config completeness before bootstrap
func lightstepConfigured(ls *meshconfig.Tracing_Lightstep) error {
	if ls.GetAddress() == "" {
		return errors.New("lightstep.address required (host:port)")
	}
	return nil
}

Type guard

func hasLightstepAddress(ls *meshconfig.Tracing_Lightstep) bool {
	return ls != nil && ls.GetAddress() != ""
}

Try / catch

if err := agent.ValidateLightstepCollector(ls); err != nil {
	if strings.Contains(err.Error(), "address is required") {
		return errors.New("lightstep tracer selected but address missing; set tracing.lightstep.address or switch provider")
	}
	return err
}

Prevention

When it happens

Trigger: Configuring `tracing.lightstep: {}` or `lightstep.accessToken: <token>` without `address` in ProxyConfig; templates that only set the token; YAML indentation putting address under the wrong key.

Common situations: Copy-pasted tracing blocks where the address line was dropped; migrating from zipkin to lightstep configs incompletely; legacy configs after Lightstep→ServiceNow migration changed collector hosts.

Related errors


AI-assisted analysis of istio/istio@8dc789c5cf (2026-08-15). Data as JSON: /api/errors/e392b8ad94381c87. Report an issue: GitHub.