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

Reply via email to