FeiYing9 opened a new issue, #12171: URL: https://github.com/apache/apisix/issues/12171
### Current Behavior I have deploy apisix-ingress-controller according to this [chart](https://github.com/apache/apisix-helm-chart/tree/master/charts/apisix-ingress-controller) Ofcourse i enabled etcdserver in ingress-controller according to this doc: https://apisix.apache.org/zh/docs/ingress-controller/composite/ And, apisix seems work well, i can open a website with apisixroute, It's just that the apisix log always reports the error periodically ### Expected Behavior apisix report no error logs ### Error Logs ```shell 2025/04/22 09:00:53 [error] 178#178: *688772 [lua] timers.lua:54: failed to wait threads, context: ngx.timer 2025/04/22 09:01:23 [error] 178#178: *695377 lua user thread aborted: runtime error: /usr/local/apisix/apisix/core/etcd.lua:353: attempt to index field 'body' (a nil value) stack traceback: coroutine 0: /usr/local/apisix/apisix/core/etcd.lua: in function 'set' /usr/local/apisix/apisix/plugins/server-info.lua:128: in function 'set' /usr/local/apisix/apisix/plugins/server-info.lua:192: in function 'report' /usr/local/apisix/apisix/plugins/server-info.lua:292: in function </usr/local/apisix/apisix/plugins/server-info.lua:287> coroutine 1: [C]: in function 'thread_wait' /usr/local/apisix/apisix/timers.lua:52: in function </usr/local/apisix/apisix/timers.lua:32> [C]: in function 'pcall' /usr/local/apisix/apisix/core/timer.lua:40: in function </usr/local/apisix/apisix/core/timer.lua:36> [C]: in function 'pcall' /usr/local/apisix/apisix/core/timer.lua:63: in function </usr/local/apisix/apisix/core/timer.lua:56>, context: ngx.timer ``` ### Steps to Reproduce 1. get the helm chart from https://github.com/apache/apisix-helm-chart/tree/master/charts/apisix-ingress-controller 2. modify the image about `apache/apisix:3.12.0-debian` and `apache/apisix-ingress-controller:1.8.0` 3. modify the config see below 4. install apisix with helm apisix-configmap: ```yaml apiVersion: v1 data: config.yaml: |- # log options log_level: "info" log_output: "stderr" cert_file: "/etc/webhook/certs/cert.pem" key_file: "/etc/webhook/certs/key.pem" http_listen: ":8080" https_listen: ":8443" ingress_publish_service: infra/apisix-gateway # this is the right service enable_profiling: true apisix_resource_sync_interval: 1h plugin_metadata_cm: "" kubernetes: kubeconfig: "" resync_interval: "6h" namespace_selector: - "" election_id: "ingress-apisix-leader-composite" ingress_class: "apisix-composite" ingress_version: "networking/v1" watch_endpointslices: false apisix_route_version: "apisix.apache.org/v2" enable_gateway_api: false apisix_version: "apisix.apache.org/v2" apisix: admin_api_version: "v3" default_cluster_base_url: http://127.0.0.1:9180/apisix/admin default_cluster_admin_key: "edd1c9f034335f136f87ad84b625c8f1" default_cluster_name: "default" etcdserver: enabled: true kind: ConfigMap metadata: name: apisix-configmap ``` apisix-gw-configmap: ```yaml apiVersion: v1 data: config.yaml: | deployment: role: traditional role_traditional: config_provider: etcd admin: allow_admin: - 127.0.0.0/24 - 0.0.0.0/0 admin_listen: ip: 0.0.0.0 port: 9180 # Default token when use API to call for Admin API. # *NOTE*: Highly recommended to modify this value to protect APISIX's Admin API. # Disabling this configuration item means that the Admin API does not # require any authentication. admin_key: # admin: can everything for configuration data - name: "admin" key: edd1c9f034335f136f87ad84b625c8f1 role: admin # viewer: only can view configuration data - name: "viewer" key: 4054f7cf07e344346cd3f287985e76a2 role: viewer etcd: host: - "http://127.0.0.1:12379" prefix: "/apisix" timeout: 60 apisix: enable_control: true enable_reuseport: true enable_heartbeat: true enable_admin: true enable_admin_cors: true enable_debug: false enable_dev_mode: false # Sets nginx worker_processes to 1 if set to true enable_ipv6: true # Enable nginx IPv6 resolver enable_http2: true enable_server_tokens: true # Whether the APISIX version number should be shown in Server header proxy_cache: # Proxy Caching configuration cache_ttl: 10s # The default caching time if the upstream does not specify the cache time zones: # The parameters of a cache - name: disk_cache_one # The name of the cache, administrator can be specify # which cache to use by name in the admin api memory_size: 50m # The size of shared memory, it's used to store the cache index disk_size: 1G # The size of disk, it's used to store the cache data disk_path: "/tmp/disk_cache_one" # The path to store the cache data cache_levels: "1:2" # The hierarchy levels of a cache router: http: radixtree_host_uri # radixtree_uri: match route by uri(base on radixtree) # radixtree_host_uri: match route by host + uri(base on radixtree) # radixtree_uri_with_parameter: match route by uri with parameters ssl: 'radixtree_sni' # radixtree_sni: match route by SNI(base on radixtree) proxy_mode: http stream_proxy: only: false tcp: - 9100 - addr: 9110 tls: true udp: - 9200 dns_resolver_valid: 30 resolver_timeout: 5 ssl: enable: true listen: - port: 9443 ssl_protocols: "TLSv1.2 TLSv1.3" ssl_ciphers: "ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384:DHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA:ECDHE-RSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES256-SHA256:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:DES-CBC3-SHA" nginx_config: large_client_header_buffers: 40 http_server_location_configuration_snippet: | proxy_buffering off; error_log: "stderr" error_log_level: "warn" # warn,error worker_processes: "auto" enable_cpu_affinity: true worker_rlimit_nofile: 20480 # the number of files a worker process can open, should be larger than worker_connections event: worker_connections: 10620 http: enable_access_log: true access_log: "/dev/stdout" access_log_format: '$remote_addr - $remote_user [$time_local] $http_host \"$request\" $status $body_bytes_sent $request_time \"$http_referer\" \"$http_user_agent\" $upstream_addr $upstream_status $upstream_response_time \"$upstream_scheme://$upstream_host$upstream_uri\"' access_log_format_escape: default keepalive_timeout: "60s" client_header_timeout: 60s # timeout for reading client request header, then 408 (Request Time-out) error is returned to the client client_body_timeout: 60s # timeout for reading client request body, then 408 (Request Time-out) error is returned to the client send_timeout: "600s" # timeout for transmitting a response to the client.then the connection is closed underscores_in_headers: "on" # default enables the use of underscores in client request header fields real_ip_header: "X-Real-IP" # http://nginx.org/en/docs/http/ngx_http_realip_module.html#real_ip_header real_ip_from: # http://nginx.org/en/docs/http/ngx_http_realip_module.html#set_real_ip_from - 127.0.0.1 - 'unix:' lua_shared_dict: # Nginx Lua shared memory zone. Size units are m or k. prometheus-metrics: 50m # In production, less than 50m is recommended http_configuration_snippet: | large_client_header_buffers 40 32k; plugins: # plugin list (sorted by priority) - real-ip - ai - client-control - proxy-control - request-id - zipkin - opentelemetry - ext-plugin-pre-req - fault-injection - mocking - serverless-pre-function - cors - ip-restriction - ua-restriction - referer-restriction - csrf - uri-blocker - request-validation - chaitin-waf - multi-auth - openid-connect - cas-auth - authz-casbin - authz-casdoor - wolf-rbac - ldap-auth - hmac-auth - basic-auth - jwt-auth - jwe-decrypt - key-auth - consumer-restriction - forward-auth - opa - authz-keycloak - proxy-cache - body-transformer - proxy-mirror - proxy-rewrite - workflow - api-breaker - limit-conn - limit-count - limit-req - gzip - server-info - traffic-split - redirect - response-rewrite - degraphql - kafka-proxy - grpc-transcode - grpc-web - public-api - prometheus - datadog - loki-logger - elasticsearch-logger - echo - loggly - http-logger - splunk-hec-logging - skywalking-logger - google-cloud-logging - sls-logger - tcp-logger - kafka-logger - rocketmq-logger - syslog - udp-logger - file-logger - clickhouse-logger - tencent-cloud-cls - inspect - example-plugin - aws-lambda - azure-functions - openwhisk - openfunction - serverless-post-function - ext-plugin-post-req - ext-plugin-post-resp plugin_attr: opentelemetry: set_ngx_var: true prometheus: enable_export_server: true export_addr: ip: 0.0.0.0 port: 9091 export_uri: /apisix/prometheus/metrics metric_prefix: apisix_ metrics: http_latency: extra_labels: - host: $host - upstream_addr: $upstream_addr - upstream_status: $upstream_status - uri: $uri - method: $request_method http_status: extra_labels: - host: $host - upstream_addr: $upstream_addr - upstream_status: $upstream_status - uri: $uri - method: $request_method kind: ConfigMap metadata: name: apisix-gw-configmap ``` ### Environment - APISIX version (run `apisix version`): `apache/apisix:3.12.0-debian` and `apache/apisix-ingress-controller:1.8.0` - Operating system (run `uname -a`): ```shell kubectl version WARNING: This version information is deprecated and will be replaced with the output from kubectl version --short. Use --output=yaml|json to get the full version. Client Version: version.Info{Major:"1", Minor:"27", GitVersion:"v1.27.5", GitCommit:"93e0d7146fb9c3e9f68aa41b2b4265b2fcdb0a4c", GitTreeState:"clean", BuildDate:"2023-08-24T00:48:26Z", GoVersion:"go1.20.7", Compiler:"gc", Platform:"linux/amd64"} Kustomize Version: v5.0.1 Server Version: version.Info{Major:"1", Minor:"27", GitVersion:"v1.27.5", GitCommit:"93e0d7146fb9c3e9f68aa41b2b4265b2fcdb0a4c", GitTreeState:"clean", BuildDate:"2023-08-24T00:42:11Z", GoVersion:"go1.20.7", Compiler:"gc", Platform:"linux/amd64"} ``` - OpenResty / Nginx version (run `openresty -V` or `nginx -V`): - etcd version, if relevant (run `curl http://127.0.0.1:9090/v1/server_info`): it's mocked etcd in apisix-ingress-controller - APISIX Dashboard version, if relevant: - Plugin runner version, for issues related to plugin runners: - LuaRocks version, for installation issues (run `luarocks --version`): -- This is an automated message from the Apache Git Service. To respond to the message, please log on to GitHub and use the URL above to go to the specific comment. To unsubscribe, e-mail: notifications-unsubscr...@apisix.apache.org.apache.org For queries about this service, please contact Infrastructure at: us...@infra.apache.org