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部署Nacos2.x,建议使用ingress进行外部访问吗?有什么好的案例可以参考吗? #291

Open
chenhao26-nineteen opened this issue Jan 19, 2022 · 15 comments

Comments

@chenhao26-nineteen
Copy link

好像使用ingress Controller访问Grpc端口无法映射 。2.x的client无法使用grpc进行服务注册。如下图GRPC端口连不上。
image

@paderlol
Copy link
Collaborator

#221

@paderlol
Copy link
Collaborator

可以参考下这个

@chenhao26-nineteen
Copy link
Author

可以参考下这个

我采用的是pvc持久化部署的,用到了peerfinder插件,好像和这个问题还不太一样?目前在于ingress这一层 grpc的端口好像开放不了,ingress只开放了80 和443端口。所以用2.x的客户端连不上2.x的 nacos server

@paderlol
Copy link
Collaborator

ingress 可以改端口的呀

@chenhao26-nineteen
Copy link
Author

ingress 可以改端口的呀

ingress的http端口(8848)和grpc端口(9848)在同一个ingress文件里面好像不能同时开放,grpc需要四层负载的支撑?这一块有案例么?2.x nacos ingress对外暴露访问 这个应该是一个通用的问题。

@chenhao26-nineteen
Copy link
Author

我采用的是pvc持久化部署的,用到了peerfinder插件,好像和这个问题还不太一样?目前在于ingress这一层 grpc的端口好像开放不了,ingress只开放了80 和443端口。所以用2.x的客户端连不上2.x的 nacos server

@chenhao26-nineteen
Copy link
Author

chenhao26-nineteen commented Jan 20, 2022

ingress 可以改端口的呀
这是我ingress的配置,好像只能映射到8848端口,没找到映射grpc端口的方式。server对应的端口是8848,大佬帮忙解答下,只能自己搭建私有ingress,然后暴露四层负载功能?

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: nacos-headless
namespace: nacos-ceph
annotations:
kubernetes.io/ingress.class: "nginx"
nginx.ingress.kubernetes.io/service-weight: ''

spec:
rules:
- host: nacos-web.nacos-xiaomi.com
http:
paths:
- path: /
backend:
serviceName: nacos-headless
servicePort: server

@paderlol
Copy link
Collaborator

@tod-yangyd
Copy link

hi,我也遇到了相同的情况,nacos需要开放grpc端口。
ingress-class默认只能配置http和https的端口,就算把http端口改成8848,剩下的9848该怎么办呢?
部署两个ingress-controller,一个配置8848一个配置9848?也不太合理把

@shihui-tang
Copy link

hi,我也遇到了相同的情况,nacos需要开放grpc端口。 ingress-class默认只能配置http和https的端口,就算把http端口改成8848,剩下的9848该怎么办呢? 部署两个ingress-controller,一个配置8848一个配置9848?也不太合理把

你好,我也遇到相同的问题,请问你这边有解决方案吗?

@tod-yangyd
Copy link

hi,我也遇到了相同的情况,nacos需要开放grpc端口。 ingress-class默认只能配置http和https的端口,就算把http端口改成8848,剩下的9848该怎么办呢? 部署两个ingress-controller,一个配置8848一个配置9848?也不太合理把

你好,我也遇到相同的问题,请问你这边有解决方案吗?

我这边后来先用普通的nginx代理请求了。
至于网上提到的配置ingress时配置注释的方法我试了不行,我提供一种我的推测:
我怀疑和nacos的sdk实现逻辑有关系,sdk那边配置的一般都是http地址,然后通过+1000直接访问的grpc地址。然而ingress-nginx只支持密文访问的grpc,也就是默认的443端口。也就是说无论怎么改ingress-nginx的密文端口都没用,要改sdk的实现逻辑。(强调下这个逻辑我没有查看sdk代码确认,单纯根据测试结果的一种推论)

根据其他人的描述,最好还是不要通过ingress,而是通过nodeport的方式配置nacos服务。或者说像nacos这种配置中心也许不适合用k8s部署

@he323219002
Copy link

hi,我也遇到了相同的情况,nacos需要开放grpc端口。 ingress-class默认只能配置http和https的端口,就算把http端口改成8848,剩下的9848该怎么办呢? 部署两个ingress-controller,一个配置8848一个配置9848?也不太合理把

你好,我也遇到相同的问题,请问你这边有解决方案吗?

我这边后来先用普通的nginx代理请求了。 至于网上提到的配置ingress时配置注释的方法我试了不行,我提供一种我的推测: 我怀疑和nacos的sdk实现逻辑有关系,sdk那边配置的一般都是http地址,然后通过+1000直接访问的grpc地址。然而ingress-nginx只支持密文访问的grpc,也就是默认的443端口。也就是说无论怎么改ingress-nginx的密文端口都没用,要改sdk的实现逻辑。(强调下这个逻辑我没有查看sdk代码确认,单纯根据测试结果的一种推论)

根据其他人的描述,最好还是不要通过ingress,而是通过nodeport的方式配置nacos服务。或者说像nacos这种配置中心也许不适合用k8s部署

我也遇到了这个问题。
是用nodeport把8848,9848暴露出来后,再用nginx反向代理吗?

@tod-yangyd
Copy link

hi,我也遇到了相同的情况,nacos需要开放grpc端口。 ingress-class默认只能配置http和https的端口,就算把http端口改成8848,剩下的9848该怎么办呢? 部署两个ingress-controller,一个配置8848一个配置9848?也不太合理把

你好,我也遇到相同的问题,请问你这边有解决方案吗?

我这边后来先用普通的nginx代理请求了。 至于网上提到的配置ingress时配置注释的方法我试了不行,我提供一种我的推测: 我怀疑和nacos的sdk实现逻辑有关系,sdk那边配置的一般都是http地址,然后通过+1000直接访问的grpc地址。然而ingress-nginx只支持密文访问的grpc,也就是默认的443端口。也就是说无论怎么改ingress-nginx的密文端口都没用,要改sdk的实现逻辑。(强调下这个逻辑我没有查看sdk代码确认,单纯根据测试结果的一种推论)
根据其他人的描述,最好还是不要通过ingress,而是通过nodeport的方式配置nacos服务。或者说像nacos这种配置中心也许不适合用k8s部署

我也遇到了这个问题。 是用nodeport把8848,9848暴露出来后,再用nginx反向代理吗?

这个应该可以,看你自己的选择,但是用nodeport的方式的话,IP地址会因为比如node故障或者其他原因漂移。如果你selector锁定在某台node上,那这样配置就失去了k8s的意义,和你单独用docker或者非容器化手段部署就没有差别了。
我这边目前的方案是选择loadbalance单独弄了个负载均衡地址给nacos,这样可以规避这个问题也没有走ingress。需要你在负载均衡器里放开8848和9848(默认)。但是我也只是自己配置测试完成,生产环境目前还是用的非容器化部署。

@chenhao26-nineteen
Copy link
Author

hi,我也遇到了相同的情况,nacos需要开放grpc端口。 ingress-class默认只能配置http和https的端口,就算把http端口改成8848,剩下的9848该怎么办呢? 部署两个ingress-controller,一个配置8848一个配置9848?也不太合理把

你好,我也遇到相同的问题,请问你这边有解决方案吗?

我这边后来先用普通的nginx代理请求了。 至于网上提到的配置ingress时配置注释的方法我试了不行,我提供一种我的推测: 我怀疑和nacos的sdk实现逻辑有关系,sdk那边配置的一般都是http地址,然后通过+1000直接访问的grpc地址。然而ingress-nginx只支持密文访问的grpc,也就是默认的443端口。也就是说无论怎么改ingress-nginx的密文端口都没用,要改sdk的实现逻辑。(强调下这个逻辑我没有查看sdk代码确认,单纯根据测试结果的一种推论)
根据其他人的描述,最好还是不要通过ingress,而是通过nodeport的方式配置nacos服务。或者说像nacos这种配置中心也许不适合用k8s部署

我也遇到了这个问题。 是用nodeport把8848,9848暴露出来后,再用nginx反向代理吗?

这个应该可以,看你自己的选择,但是用nodeport的方式的话,IP地址会因为比如node故障或者其他原因漂移。如果你selector锁定在某台node上,那这样配置就失去了k8s的意义,和你单独用docker或者非容器化手段部署就没有差别了。 我这边目前的方案是选择loadbalance单独弄了个负载均衡地址给nacos,这样可以规避这个问题也没有走ingress。需要你在负载均衡器里放开8848和9848(默认)。但是我也只是自己配置测试完成,生产环境目前还是用的非容器化部署。

我们也是使用 k8s Service loadbalance方式单独开了9848。

@chenhao26-nineteen
Copy link
Author

eg:nacos-ceph-loadbalancer-service.yaml

apiVersion: v1
kind: Service
metadata:
name: nacos
labels:
app: nacos
annotations:
service.beta.kubernetes.io/loadbalancer-uuid: "xxxx"
spec:
ports:
- port: 8848
name: server
targetPort: 8848
- port: 9848
name: client-rpc
targetPort: 9848
- port: 9849
name: raft-rpc
targetPort: 9849
## 兼容1.4.x版本的选举端口
- port: 7848
name: old-raft-rpc
targetPort: 7848
type: LoadBalancer
selector:
app: nacos

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

5 participants