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

请问k8s集群内服务连接nacos用什么地址? #221

Open
evaxiang opened this issue May 26, 2021 · 33 comments
Open

请问k8s集群内服务连接nacos用什么地址? #221

evaxiang opened this issue May 26, 2021 · 33 comments

Comments

@evaxiang
Copy link

k8s内部pod连接nacos集群地址是这样?
"nacos-0.nacos-headless.default.svc.cluster.local:8848 nacos-1.nacos-headless.default.svc.cluster.local:8848 nacos-2.nacos-headless.default.svc.cluster.local:8848"
还是用svc的nodeport地址呢?

我开启了istio的注入后,发现后台pod无法注册上nacos,目前连接nacos使用的是svc的nodeport

@evaxiang
Copy link
Author

@ paderlol

@paderlol
Copy link
Collaborator

用nodeport可以,不用peerfinder插件就行了,自己配置集群节点就行,还有自己排查原因,是不是集群选主没成功

@evaxiang
Copy link
Author

用nodeport可以,不用peerfinder插件就行了,自己配置集群节点就行,还有自己排查原因,是不是集群选主没成功

不是选主问题,麻烦看下这里alibaba/nacos#5860

@evaxiang
Copy link
Author

nacos2.0.1,使用了peerfinder nacos集群本身没有问题,nacos-expose.ops.svc.cluster.local:9848是单独启的k8s-nodeport地址,发现开启istio注入pod无法连接nacos部分接口

@paderlol
Copy link
Collaborator

使用nodeport就不能用peerfinder,另外端口对外需要开放8848和9848,然后你用nodeport估计没法用客户端注册,因为客户端grpc端口会根据主端口加1000算出来的,你代理成nodeport的假设30000多也没用,因为客户端不会用你开放的grpc端口

@paderlol
Copy link
Collaborator

建议使用反代

@evaxiang
Copy link
Author

evaxiang commented May 26, 2021

使用nodeport就不能用peerfinder,另外端口对外需要开放8848和9848,然后你用nodeport估计没法用客户端注册,因为客户端grpc端口会根据主端口加1000算出来的,你代理成nodeport的假设30000多也没用,因为客户端不会用你开放的grpc端口

nodeport的代理端口开启了对应的8848和9848的,pod注册没有问题,就是istio开了sidecar注入就连接不稳定了

然后你用nodeport估计没法用客户端注册

开发本地调试,使用nodeport走外网ip,用grpc协议注册没问题

@evaxiang
Copy link
Author

使用nodeport就不能用peerfinder

请问这个的意思是指nacos内部节点访问svc地址吗?这种配置?https://github.com/nacos-group/nacos-k8s/blob/master/deploy/nacos/nacos-no-pvc-ingress.yaml

@evaxiang
Copy link
Author

建议使用反代

反代是指ingress吗?现在主要没k8s内部pod注册nacos问题,外部服务注册没开始istio注入还好

@paderlol
Copy link
Collaborator

不是,是你你要对外开放,外部客户端访问的grpc端口是主端口自动+1000,不能你自己配置,就是外部你配置的是8848,他默认内部访问grpc就是9848,懂了吗?所以你开nodeport没用

@evaxiang
Copy link
Author

evaxiang commented May 26, 2021

不是,是你你要对外开放,外部客户端访问的grpc端口是主端口自动+1000,不能你自己配置,就是外部你配置的是8848,他默认内部访问grpc就是9848,懂了吗?所以你开nodeport没用

现在是k8s内部服务注册,能连上grpc的9848端口,只是/BiRequestStream/requestBiStream接口请求返回status状态码是0,注册失败

还是回到最还是问题疑问吧,k8s内部服务(spring boot)连接nacos的地址究竟用那种方式最好?
1,nacos-headless的地址,如
nacos-headless.default.svc.cluster.local:8848

2,直接访问nacos所有节点地址,如
nacos-0.nacos-headless.default.svc.cluster.local:8848 nacos-1.nacos-headless.default.svc.cluster.local:8848 nacos-2.nacos-headless.default.svc.cluster.local:8848

3,用自己创建的svc-nodeport地址,如
nacos-expose.default.svc.cluster.local:8848

@paderlol
Copy link
Collaborator

第二个就行了,不过你需要访问console还是需要放开8848地址

@evaxiang
Copy link
Author

evaxiang commented May 26, 2021

第二个就行了,不过你需要访问console还是需要放开8848地址

好的,我在试下,谢谢,nacos的web用第三个nodeport访问没有问题

@paderlol
Copy link
Collaborator

用了istio那个转发是不是http2的问题

@paderlol
Copy link
Collaborator

另外你可以看下这个,是不是因为service端口没有写明是grpc,istio如果用grpc必须在name上明确,你可以看下这个istio官方文档https://istio.io/latest/docs/ops/configuration/traffic-management/protocol-selection/

@evaxiang
Copy link
Author

用了istio那个转发是不是http2的问题

恩开始也怀疑svc-nodeport没我写对,istio没适配到走http2,看见有说要写这样

  • name: http2-nacos
    port: 8848
    protocol: TCP
    targetPort: 8848

@evaxiang
Copy link
Author

evaxiang commented May 26, 2021

另外你可以看下这个,是不是因为service端口没有写明是grpc,istio如果用grpc必须在name上明确,你可以看下这个istio官方文档https://istio.io/latest/docs/ops/configuration/traffic-management/protocol-selection/

恩,我参考这个再试试,谢谢指导。究竟name前缀是http2还是grpc。。有文章说用了grpc反而不通

@paderlol
Copy link
Collaborator

grpc吧

@evaxiang
Copy link
Author

有文章说用了grpc反而不通
https://blog.csdn.net/scun_cg/article/details/104625863

@paderlol
Copy link
Collaborator

因为客户端本来就是grpc,http2和grpc头不一样的,不知道istio是不是这个http2的标头是否包含grpc的

@paderlol
Copy link
Collaborator

8848不是grpc啊,只有9848是

@evaxiang
Copy link
Author

第二个就行了,不过你需要访问console还是需要放开8848地址

今天多次测试:
第二种配置nacos所有pod地址方式,可以注册上nacos,但是不稳定,nacos里经常丢失,pod节点扩容也无法发现新节点等
第三种配置用nacos-headless地址,直接注册不上nacos

@paderlol
Copy link
Collaborator

网络不稳定可能跟k8s或者istio转发相关,这个需要自己去调试,目前我自己公司使用了aws eks 1.4.2版本没有这个问题

@evaxiang
Copy link
Author

都是K8S集群内部访问,测试不是网络不稳定啊

@paderlol
Copy link
Collaborator

那你说的不稳定,丢失是?

@evaxiang
Copy link
Author

那你说的不稳定,丢失是?

注册上nacos,服务列表里有服务,一会有不在了,或者增加其他服务pod数量,nacos服务列表里又找不到
以上问题都建立在isito开启注入,不开启没问题,但是不开启isito很多功能都无法使用了

@paderlol
Copy link
Collaborator

这个我没接触过,感觉是你开启新pod后,envoy这里是不是会有个刷新iptables的操作导致的

@evaxiang
Copy link
Author

这个我没接触过,感觉是你开启新pod后,envoy这里是不是会有个刷新iptables的操作导致的

以前用zookeeper,同样开启istio注入功能,没这个问题呢

@paderlol
Copy link
Collaborator

zookeeper没有使用grpc

@evaxiang
Copy link
Author

嗯是的,我们一直怀疑还是走grpc有关系,nacos 1.4没走grpc

@1450793561
Copy link

配置中心就不用放到k8s上了吧

@lbzss
Copy link

lbzss commented Apr 9, 2024

第二个就行了,不过你需要访问console还是需要放开8848地址

今天多次测试: 第二种配置nacos所有pod地址方式,可以注册上nacos,但是不稳定,nacos里经常丢失,pod节点扩容也无法发现新节点等 第三种配置用nacos-headless地址,直接注册不上nacos

我的nacos版本是2.0.4,这几天测试的时候也发现了这个问题,看下来还是跟istio代理有关。
用第三种配置nacos-headless.default.svc.cluster.local:8848
参考isito文档修改了headlessService的配置如下:

spec:
  clusterIP: None
  clusterIPs:
    - None
  internalTrafficPolicy: Cluster
  ipFamilies:
    - IPv4
  ipFamilyPolicy: SingleStack
  ports:
    - name: server
      port: 8848
      protocol: TCP
      targetPort: 8848
    - name: client-rpc
      port: 9848
      protocol: TCP
      targetPort: 9848
    **- appProtocol: grpc**
      name: raft-rpc
      port: 9849
      protocol: TCP
      targetPort: 9849
    **- appProtocol: grpc**
      name: old-raft-rpc
      port: 7848
      protocol: TCP
      targetPort: 7848

@lbzss
Copy link

lbzss commented Apr 28, 2024

alibaba/nacos#10141
启用了istio的集群中需要将9848设置为TCP协议

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

No branches or pull requests

4 participants