Troubleshoot Preflight failures with HTTPS Proxy

When installing applications using Replicated Embedded Cluster in environments with --http-proxy, --https-proxy configurations, you may encounter preflight failures that prevent successful installation. This guide walks through common issues and their solutions.

Common Error Symptoms

You might see errors similar to these during installation:

sudo ./app install --license license.yaml --https-proxy=https://proxy.example.com:3129

✔  Initialization complete
✗  2 host preflights failed

• Error connecting to https://replicated.app. Ensure your firewall is properly configured, and use --http-proxy, --https-proxy, and --no-proxy if there is a proxy server.

• Error connecting to https://registry.replicated.com. Ensure your firewall is properly configured, and use --http-proxy, --https-proxy, and --no-proxy if there is a proxy server.

Root Cause Analysis

The most common root cause for these failures is certificate validation issues with the HTTPS proxy, particularly when using self-signed certificates or certificates that don’t follow modern standards.

Step 1: Verify Basic Connectivity

First, test basic connectivity through your proxy using curl:

curl -v https://replicated.app --proxy https://your-proxy.example.com:3129

If this works, the issue is likely related to how the preflight checks handle certificate validation.

Step 2: Check Your Embedded Cluster Version

Ensure you’re using Embedded Cluster version 2.6.0 or later, which includes improved support for private certificate authorities:

./your-app version

Starting with version 2.6.0, Embedded Cluster automatically detects the system CA bundle and mounts it into components that require trust validation.

Step 3: Run Detailed Preflight Diagnostics

Create a test preflight specification to get detailed error information, update the proxy field to your proxy address:

# preflight-test.yaml
apiVersion: troubleshoot.sh/v1beta2
kind: HostPreflight
metadata:
  name: proxy-test
spec:
  collectors:
    - http:
        collectorName: http-replicated-app
        get:
          url: 'https://replicated.app'
          timeout: 5s
          proxy: 'https://your-proxy.example.com:3129'
    - http:
        collectorName: http-proxy-replicated-com
        get:
          url: 'https://proxy.replicated.com/v2/'
          timeout: 5s
          proxy: 'https://your-proxy.example.com:3129'
  analyzers:
    - http:
        checkName: API Access
        collectorName: http-replicated-app
        outcomes:
          - fail:
              when: error
              message: >
                Error connecting to https://replicated.app.
                Check proxy configuration and certificate trust.
          - pass:
              when: 'statusCode == 200'
              message: 'Connected to https://replicated.app'
    - http:
        checkName: Registry Access
        collectorName: http-proxy-replicated-com
        outcomes:
          - fail:
              when: error
              message: >
                Error connecting to https://proxy.replicated.com.
                Check proxy configuration and certificate trust.
          - pass:
              when: 'statusCode == 401'
              message: 'Connected to https://proxy.replicated.com'

Run the diagnostic:

/var/lib/embedded-cluster/bin/kubectl-preflight -v=5 --interactive=0 preflight-test.yaml
# or <--data-dir>/bin/kubectl-preflight

Step 4: Analyze Certificate Issues

Look for specific error messages in the verbose output. Common issues include:

Legacy Common Name Issue

Request failed: proxyconnect tcp: tls: failed to verify certificate: x509: certificate relies on legacy Common Name field, use SANs instead

Solution: Update your proxy certificate to include Subject Alternative Names (SANs) instead of relying solely on the Common Name field.

Self-Signed Certificate Issues

Request failed: proxyconnect tcp: tls: failed to verify certificate: x509: certificate signed by unknown authority

Solution: Ensure your proxy’s CA certificate is installed in the system trust store.

If the issue persists after following these troubleshooting steps, reach out to Replicated support with outputs from all commands above.