Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

feat: stream subsystem support dns service discovery #8593

Merged
merged 6 commits into from
Jan 12, 2023

Conversation

ronething
Copy link
Contributor

@ronething ronething commented Dec 30, 2022

Description

Fixes #7779

For SRV record which has port 0, we will fallback to use the upstream protocol's default port.

i'm not sure what is the tcp protocol's default port, so my test case is temporary like below.

proxy request to 127.0.0.1:nil

=== TEST 14: SRV (port is 0)
--- apisix_yaml
upstreams:
    - service_name: "zero.srv.test.local"
      discovery_type: dns
      type: roundrobin
      id: 1
--- error_log
connect() failed
--- grep_error_log eval
qr/proxy request to \S+/
--- grep_error_log_out
proxy request to 127.0.0.1:nil

i will modify scheme_to_port if need.

local scheme_to_port = {
    http = 80,
    https = 443,
    grpc = 80,
    grpcs = 443
}

Checklist

  • I have explained the need for this PR and the problem it solves
  • I have explained the changes or the new features added to this PR
  • I have added tests corresponding to this change
  • I have updated the documentation to reflect this change
  • I have verified that this change is backward compatible (If not, please discuss on the APISIX mailing list first)

@ronething ronething marked this pull request as ready for review January 4, 2023 10:55
--- grep_error_log eval
qr/proxy request to \S+/
--- grep_error_log_out
proxy request to 127.0.0.1:nil
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Maybe we need to reject zero port in the stream, as there is not default port for TCP.
proxy request to 127.0.0.1:nil such an error log looks like a bug in APISIX.

Copy link
Contributor Author

@ronething ronething Jan 5, 2023

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

For HTTP, we will fill node info in apisix/upstream.lua

local function fill_node_info(up_conf, scheme, is_stream)

For Stream, if node port is 0, it will not be filled node info, so the error log is like proxy request to 127.0.0.1:nil which in the apisix/balancer.lua

core.log.info("proxy request to ", server.host, ":", server.port)

i wonder if we need to reject zero port in the stream, we should reject in where, can you give me some hints? thank you.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

i ignore zero port node when is in the stream subsystem.




=== TEST 17: Invalid order type in config.yaml
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Do we need these tests? The order of type doesn't matter with the L4 or L7.

Copy link
Contributor Author

@ronething ronething Jan 5, 2023

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

i will remove these tests later.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

done.

type: roundrobin
id: 1
--- error_log
127.0.0.1:53
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The expected error log is not long enough and confusing.
Why don't we use

connect to 127.0.0.1:53

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

done.


if (!$block->stream_request) {
# GET /hello HTTP/1.0\r\nHost: 127.0.0.1:1985\r\n\r\n
$block->set_value("stream_request", "\x47\x45\x54\x20\x2f\x68\x65\x6c\x6c\x6f\x20\x48\x54\x54\x50\x2f\x31\x2e\x30\x0d\x0a\x48\x6f\x73\x74\x3a\x20\x31\x32\x37\x2e\x30\x2e\x30\x2e\x31\x3a\x31\x39\x38\x35\x0d\x0a\x0d\x0a");
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I spend some time and figure out we can set it directly with:

Suggested change
$block->set_value("stream_request", "\x47\x45\x54\x20\x2f\x68\x65\x6c\x6c\x6f\x20\x48\x54\x54\x50\x2f\x31\x2e\x30\x0d\x0a\x48\x6f\x73\x74\x3a\x20\x31\x32\x37\x2e\x30\x2e\x30\x2e\x31\x3a\x31\x39\x38\x35\x0d\x0a\x0d\x0a");
$block->set_value("stream_request", "GET /hello HTTP/1.0\r\nHost: 127.0.0.1:1985\r\n\r\n");

@ronething ronething requested a review from spacewander January 6, 2023 06:11
@ronething
Copy link
Contributor Author

@tokers @soulbird Could you please take a look? thanks.

@spacewander spacewander merged commit c9ed5d7 into apache:master Jan 12, 2023
@ronething ronething deleted the feat/stream_route_discovery_dns branch January 12, 2023 01:31
hongbinhsu added a commit to fitphp/apix that referenced this pull request Jan 30, 2023
* upstream/master: (67 commits)
  fix: grpc-transcode plugin: fix map data population (apache#8731)
  change(jwt-auth): unify apisix/core/vault.lua and apisix/secret/vault.lua (apache#8660)
  feat: stream subsystem support consul_kv service discovery (apache#8633)
  fix(proxy-mirror): use with uri rewrite (apache#8718)
  ci: move helper script to the right dir (apache#8691)
  refactor(pubsub): simpify the get_cmd implementation (apache#8608)
  feat: stream subsystem support kubernetes service discovery (apache#8640)
  docs: fix deployment links (apache#8714)
  fix: remove backslash before slash when encoding (apache#8684)
  ci: kafka should register port in the zookeeper same as exposed (apache#8672)
  docs: fix plugin config naming (apache#8701)
  docs: fix code block (apache#8700)
  docs: rename kms to secret (apache#8697)
  docs: replace transparent logos with white background logos (apache#8689)
  fix: upgrade lua-resty-etcd to 1.10.3 (apache#8668)
  fix: upgrade casbin to 1.41.3 to improve performance (apache#8676)
  chore: make send_stream_request more clear (apache#8627)
  feat: stream subsystem support nacos service discovery (apache#8584)
  feat: stream subsystem support dns service discovery (apache#8593)
  refactor(admin): refactor resource routes (apache#8611)
  ...
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

feat: As a user, I want to support service discovery in the stream subsystem
3 participants