nacos-group / nacos-k8s

This project contains a Nacos Docker image meant to facilitate the deployment of Nacos on Kubernetes using StatefulSets.
583 stars 468 forks source link

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

Open evaxiang opened 3 years ago

evaxiang commented 3 years ago

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 commented 3 years ago

@ paderlol

paderlol commented 3 years ago

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

evaxiang commented 3 years ago

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

不是选主问题,麻烦看下这里https://github.com/alibaba/nacos/issues/5860

evaxiang commented 3 years ago

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

paderlol commented 3 years ago

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

paderlol commented 3 years ago

建议使用反代

evaxiang commented 3 years ago

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

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

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

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

evaxiang commented 3 years ago

使用nodeport就不能用peerfinder

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

evaxiang commented 3 years ago

建议使用反代

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

paderlol commented 3 years ago

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

evaxiang commented 3 years ago

不是,是你你要对外开放,外部客户端访问的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 commented 3 years ago

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

evaxiang commented 3 years ago

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

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

paderlol commented 3 years ago

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

paderlol commented 3 years ago

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

evaxiang commented 3 years ago

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

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

evaxiang commented 3 years ago

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

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

paderlol commented 3 years ago

grpc吧

evaxiang commented 3 years ago

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

paderlol commented 3 years ago

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

paderlol commented 3 years ago

8848不是grpc啊,只有9848是

evaxiang commented 3 years ago

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

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

paderlol commented 3 years ago

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

evaxiang commented 3 years ago

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

paderlol commented 3 years ago

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

evaxiang commented 3 years ago

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

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

paderlol commented 3 years ago

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

evaxiang commented 3 years ago

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

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

paderlol commented 3 years ago

zookeeper没有使用grpc

evaxiang commented 3 years ago

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

1450793561 commented 2 years ago

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

lbzss commented 3 months ago

第二个就行了,不过你需要访问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 commented 3 months ago

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