在k8s中使用自定义端口的nginx ingress

3

我有多个运行在80端口的服务。

现在我要部署另一个运行在3310端口的服务(病毒扫描),但是如果我尝试使用nginx,似乎无法正确地使端口工作。我在某个地方读到,nginx只适用于标准端口。

所以我采取了使用负载均衡器服务的路线。这很完美,但需要额外的IP地址等成本。

是否有任何方法可以继续使用nginx入口来处理这个非标准端口?从而消除对集群的额外外部访问需求?


这个病毒扫描器应该从互联网上访问还是只能本地访问?你对你的域名有控制权吗?第一个想法是通过服务公开该扫描器,并在Nginx入口创建重写规则,如果扫描器支持http:https。 - Nick
不一定,我希望可以在功能应用程序中打开它,因此它并不完全在集群内。我正在使用Azure,因此如果我使用Loaf均衡器路由,则可以使用NSG。是的,我控制域并将A记录指向了IP地址。 - Kevin
2个回答

4
如果端口3310上的病毒扫描程序接受HTTP/HTTPS连接,则可以使用入口控制器。入口资源仅接受80和443端口的传入流量。您需要将该服务暴露给不同的主机名或路径,以确定要发送到您的杀毒软件服务的请求。
如果您需要TCP/UDP连接到服务,则可以创建一个ConfigMap,该ConfigMap由nginx入口控制器读取。您需要在启动时通过容器参数(在入口控制器“Deployment”资源中)向nginx入口控制器传递参数--tcp-services-configmap
给定这个示例入口控制器部署资源,您需要将参数--tcp-service-configmap=default/tcp-controller-configmap添加到文件末尾,作为args列表中的另一个元素。
ConfigMap可能如下所示:
apiVersion: v1
kind: ConfigMap
metadata:
    name: tcp-controller-configmap
    namespace: default
data:
    3310: "default/name-of-your-av-service:3310"

我不认为它会,但我怎么能确定呢?我最初尝试了inginx ingress并将域名指向k8s IP,然后尝试使用服务将端口80映射到3310,但它就是无法工作,因此采用了负载均衡器的方式。现在这样也没什么大问题,但想要遵循最佳实践,这让我对自己迄今所做的事情产生了疑问。 - Kevin
@Kevin,我假设你正在运行接受TCP socket连接的ClamAV。这不是你应该向公共互联网开放的服务。确保你能够将3310端口的入站连接限制为只有你控制的系统。我已经在我的答案中更新了更多有关配置更改以暴露TCP端口的详细信息。 - bpdohall
你说得非常正确。目前,我已经使用了负载均衡器方法,并使用Azure NSG来限制从“允许”的IP和服务连接到端口,但是如果我要使用nginx ingress,则会使用nginx注释白名单。我会看一下确认方面的内容,之前没有意识到可以这样做。谢谢。 - Kevin

1
你可以通过NodePort服务访问病毒扫描器。你的节点应该已经分配了外部IP地址,因此不需要额外费用。
你关于入口实体只能在端口80和442上进行外部访问是正确的。根据K8s文档,它们似乎是这样设计的。

我不想使用NodePort,因为这会在所有节点上打开相同的端口,并且端口范围非常有限,我实际上无法想象在哪里使用节点端口。但是,你说得对,这种方式不需要另一个IP。 - Kevin

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接