wanghaolonggit commented on issue #10978:
URL: https://github.com/apache/apisix/issues/10978#issuecomment-1972833003

   > please share the steps to reproduce.
   
   docker-compose.yml
   `
   version: "3"
   services:
     apisix:
       image: apache/apisix:${APISIX_IMAGE_TAG:-3.2.0-debian}
       restart: always
       volumes:
         - ./apisix_conf/config.yaml:/usr/local/apisix/conf/config.yaml:ro
       depends_on:
         - etcd
       network_mode: host
   
     etcd:
       image: bitnami/etcd:3.4.15
       restart: always
       volumes:
         - etcd_data:/bitnami/etcd
       environment:
         ETCD_ENABLE_V2: "true"
         ALLOW_NONE_AUTHENTICATION: "yes"
         ETCD_ADVERTISE_CLIENT_URLS: "http://etcd:2379";
         ETCD_LISTEN_CLIENT_URLS: "http://0.0.0.0:2379";
       network_mode: host
   
     prometheus:
       image: prom/prometheus:v2.25.0
       restart: always
       volumes:
         - ./prometheus_conf/prometheus.yml:/etc/prometheus/prometheus.yml
       network_mode: host
     grafana:
       image: grafana/grafana:7.3.7
       restart: always
       volumes:
         - "./grafana_conf/provisioning:/etc/grafana/provisioning"
         - "./grafana_conf/dashboards:/var/lib/grafana/dashboards"
         - "./grafana_conf/config/grafana.ini:/etc/grafana/grafana.ini"
       network_mode: host
   
   volumes:
     etcd_data:
       driver: local
   `
   apisix config
   `
   apisix:
     node_listen: 9080              # APISIX listening port
     enable_ipv6: false
   
     enable_control: true
     control:
       ip: "0.0.0.0"
       port: 9092
   
     stream_proxy:
       only: false
       udp:
         - 9997
         - 9996
   deployment:
     admin:
       allow_admin:               # 
http://nginx.org/en/docs/http/ngx_http_access_module.html#allow
         - 0.0.0.0/0              # We need to restrict ip access rules for 
security. 0.0.0.0/0 is for test.
   
       admin_key:
         - name: "admin"
           key: edd1c9f034335f136f87ad84b625c8f1
           role: admin                 # admin: manage all configuration data
   
         - name: "viewer"
           key: 4054f7cf07e344346cd3f287985e76a2
           role: viewer
   
     etcd:
       host:                           # it's possible to define multiple etcd 
hosts addresses of the same etcd cluster.
         - "http://127.0.0.1:2379";          # multiple etcd address
       prefix: "/apisix"               # apisix configurations prefix
       timeout: 30                     # 30 seconds
   
   plugin_attr:
     prometheus:
       export_addr:
         ip: "0.0.0.0"
         port: 9091
   
   `
   add stream
   `
   curl http://127.0.0.1:9180/apisix/admin/stream_routes/1 -H 'X-API-KEY: 
edd1c9f034335f136f87ad84b625c8f1' -X PUT -d '
   {
       "upstream": {
           "nodes": {
               "192.168.1.80:9999": 1
           },
           "type": "roundrobin"
       },
        "server_port":9997
   }'
   `
   udp server go code
   
   `
   package main
   
   import (
        "fmt"
   
        "net"
   )
   
   func main() {
        socket, err := net.ListenUDP("udp4", &net.UDPAddr{
                IP:   net.IPv4(0, 0, 0, 0),
                Port: 9999,
        })
        if err != nil {
                fmt.Println("监听失败!", err)
        }
        defer socket.Close()
        for {
                // 读取数据
                data := make([]byte, 4096)
                read, remoteAddr, err := socket.ReadFromUDP(data)
                if err != nil {
                        fmt.Println("读取数据失败!", err)
                        continue
                }
                fmt.Println(read, remoteAddr)
                fmt.Printf("%s\n\n", data)
                // 发送数据
                senddata := []byte("hello client!")
                _, err = socket.WriteToUDP(senddata, remoteAddr)
                if err != nil {
                        fmt.Println("发送数据失败!", err)
                        return
                }
        }
   }
   
   ` 
   
   
   openresty docker-compose 
   
   
   `
   version: '3'
   services:
     nginx:
      image: openresty/openresty:1.19.9.1-14-buster-fat
      restart: always
      network_mode: host
      environment:
          - TZ=Asia/Shanghai
      volumes:
       - ./conf:/usr/local/openresty/nginx/conf
       - ./nginx/logs:/usr/local/openresty/nginx/logs
   `
   nginx conf 
   `
   #user  nobody;
   #worker_processes 1;
   
   # Enables the use of JIT for regular expressions to speed-up their 
processing.
   pcre_jit on;
   
   
   
   #error_log  logs/error.log;
   #error_log  logs/error.log  notice;
   #error_log  logs/error.log  info;
   
   #pid        logs/nginx.pid;
   
   
   events {
       worker_connections  1024;
   }
   
   
   http {
       include       mime.types;
       default_type  application/octet-stream;
   
       # Enables or disables the use of underscores in client request header 
fields.
       # When the use of underscores is disabled, request header fields whose 
names contain underscores are marked as invalid and become subject to the 
ignore_invalid_headers directive.
       # underscores_in_headers off;
   
       #log_format  main  '$remote_addr - $remote_user [$time_local] "$request" 
'
       #                  '$status $body_bytes_sent "$http_referer" '
       #                  '"$http_user_agent" "$http_x_forwarded_for"';
   
       #access_log  logs/access.log  main;
   
           # Log in JSON Format
           # log_format nginxlog_json escape=json '{ "timestamp": 
"$time_iso8601", '
           # '"remote_addr": "$remote_addr", '
           #  '"body_bytes_sent": $body_bytes_sent, '
           #  '"request_time": $request_time, '
           #  '"response_status": $status, '
           #  '"request": "$request", '
           #  '"request_method": "$request_method", '
           #  '"host": "$host",'
           #  '"upstream_addr": "$upstream_addr",'
           #  '"http_x_forwarded_for": "$http_x_forwarded_for",'
           #  '"http_referrer": "$http_referer", '
           #  '"http_user_agent": "$http_user_agent", '
           #  '"http_version": "$server_protocol", '
           #  '"nginx_access": true }';
           # access_log /dev/stdout nginxlog_json;
   
       # See Move default writable paths to a dedicated directory (#119)
       # https://github.com/openresty/docker-openresty/issues/119
       client_body_temp_path /var/run/openresty/nginx-client-body;
       proxy_temp_path       /var/run/openresty/nginx-proxy;
       fastcgi_temp_path     /var/run/openresty/nginx-fastcgi;
       uwsgi_temp_path       /var/run/openresty/nginx-uwsgi;
       scgi_temp_path        /var/run/openresty/nginx-scgi;
   
       sendfile        on;
       #tcp_nopush     on;
   
       #keepalive_timeout  0;
       keepalive_timeout  65;
   
       #gzip  on;
   
       include /etc/nginx/conf.d/*.conf;
   
       # Don't reveal OpenResty version to clients.
       # server_tokens off;
   }
   
   
   
   
   stream {
    server {
               listen 9998 udp;
               proxy_pass 192.168.1.80:9999;
               proxy_timeout 1s;
               proxy_responses 1;
           }
   
   }
   `
   
   
   
   
   
   


-- 
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: [email protected]

For queries about this service, please contact Infrastructure at:
[email protected]

Reply via email to