apache / apisix

The Cloud-Native API Gateway
https://apisix.apache.org/blog/
Apache License 2.0
13.96k stars 2.45k forks source link

bug: Configuration errors due to environment variables sharing prefixes #11239

Open ilya-tishonok opened 1 month ago

ilya-tishonok commented 1 month ago

Current Behavior

When running Apache APISIX in standalone mode, there seems to be an issue with the environment variable substitution mechanism where variables with a common prefix are not correctly recognized. This results in the wrong values being used for certain configuration settings.

For example for configuration (apisix.yaml):

organizations_server:
  keepalive_pool: ${{ORGANIZATIONS_SERVER_KEEPALIVE_POOL}}
  keepalive_timeout: ${{ORGANIZATIONS_SERVER_KEEPALIVE_TIMEOUT}}
  keepalive: ${{ORGANIZATIONS_SERVER_KEEPALIVE}}

and envs: ORGANIZATIONS_SERVER_KEEPALIVE_POOL=60000 ORGANIZATIONS_SERVER_KEEPALIVE_TIMEOUT=10000 ORGANIZATIONS_SERVER_KEEPALIVE=wrong_value

values for keepalive_pool and keepalive_timeout are incorrectly populated with the value of ORGANIZATIONS_SERVER_KEEPALIVE (i.e., wrong_value).

Expected Behavior

Configuration values should be correctly populated according to their corresponding environment variables based on unique, fully matched variable names.

Error Logs

image

Steps to Reproduce

  1. Ensure basic config.yaml and apisix.yaml configurations are set up for APISIX in standalone mode.
  2. Modify the configuration to reference environment variables that share the same prefix but are intended for different settings. For example, include references to TEST_ENV_CORRECT and TEST_ENV in the configuration as follows:
    example_config:
    correct_value: ${{TEST_ENV_CORRECT}}
    base_value: ${{TEST_ENV}}
  3. Set the environment variables to different values: TEST_ENV_CORRECT=expected_value TEST_ENV=base_value
  4. Start APISIX.

Environment

hanqingwu commented 1 month ago

the same as #11121 ?