Get hands-on experience with 20+ free Google Cloud products and $300 in free credit for new customers.

ESPv2 random 503 error (upstream_reset_before_response_started)

 

Dear all,

I have configured a pod with ESPv2 as a sidecar to manage requests with Cloud Endpoint. The configuration seems to work well, but occasionally I receive a 503 error (upstream_reset_before_response_started{connection_failure,immediate_connect_error:_Cannot_assign_requested_address}). My upstream backend service is still running and functioning correctly. I'm unsure how to address this issue. Do you have any suggestions?

Here is the ESPv2 sidecar configuration:

 

        - name: esp
          imagePullPolicy: Always
          image: gcr.io/endpoints-release/endpoints-runtime:2
          args: [
            "--listener_port=9000",
            "--backend=127.0.0.1:8080", 
            "--service=api-prod.endpoints.MY-PROJECT.cloud.goog",
            "--rollout_strategy=managed",
            "--tracing_sample_rate=1.0",
            "--ssl_server_cert_path", "/etc/esp/ssl",
          ]
          volumeMounts:
            - mountPath: /etc/esp/ssl
              name: esp-ssl
              readOnly: true
          resources: {}
          terminationMessagePath: /dev/termination-log
          terminationMessagePolicy: File
          ports:
            - containerPort: 9000
              protocol: TCP

 

Thank you

 

0 1 936
1 REPLY 1

Hi

I would recommend following these steps to troubleshoot and directly address the issue:

(1) Check Pod Network

Ensure the Kubernetes pod can communicate with the upstream service. Review Kubernetes network policies and firewall rules.

 

kubectl describe networkpolicy <policy-name>

 

(2) Test Connectivity

From within the ESPv2 container, verify connectivity to the upstream service.

 

kubectl exec -it <pod-name> -c esp -- curl -I http://127.0.0.1:8080

 

(3) Inspect Pod Resources

Check for any resource limits on the pod that might impact network connections.

 

kubectl describe pod <pod-name>

 

(4) Check System Parameters

Adjust network-related system parameters on the node, if necessary. For example, to expand the local port range:

 

sysctl -w net.ipv4.ip_local_port_range="1024 65535"

 

(5) Increase the logging level

 

args: [
"--listener_port=9000",
"--log_level=debug", # Add this line
# other args...
]

 

(6) Ensure the ESPv2 image is up-to-date

 

kubectl set image deployment/<deployment-name> esp=gcr.io/endpoints-release/endpoints-runtime:latest

 

(7) Configure Application-Level Retries

Implement retry logic in the client application to handle intermittent 503 errors gracefully.

import requests
from requests.adapters import HTTPAdapter
from requests.packages.urllib3.util.retry import Retry

retry_strategy = Retry(
    total=3,
    status_forcelist=[503],
    method_whitelist=["HEAD", "GET", "OPTIONS"]
)

adapter = HTTPAdapter(max_retries=retry_strategy)
http = requests.Session()
http.mount("http://", adapter)
http.mount("https://", adapter)

response = http.get("http://127.0.0.1:9000")

I hope that helps

Regards

Mahmoud

 

 

Top Labels in this Space
Top Solution Authors