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

Using custom ports for nginx ingress in k8s

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

我现在正在部署另一个在端口 3310 上运行的服务(病毒扫描程序),如果我尝试使用 nginx,我似乎无法让这些端口正常工作。我在某处读到 nginx 仅适用于标准端口。

所以我选择了使用负载均衡器服务。这非常有效,但会增加额外 IP 地址等的成本。

这个非标准端口有没有办法继续使用nginx ingress?从而消除对集群的额外外部访问的需要?

如果端口 3310 上的病毒扫描程序接受 HTTP/HTTPS 连接,那么您可以使用入口控制器。入口资源将仅接受端口 80 和 443 上的传入流量。您需要将该服务公开给不同的主机名或路径,以确定要发送给您的防病毒服务的请求。

如果您需要 TCP/UDP 个服务连接,您可以 create a ConfigMap which is read by nginx ingress controller。您需要在启动时将参数 --tcp-services-configmap 传递给 nginx 入口控制器(通过入口控制器 Deployment 资源中的容器参数)。

鉴于此 sample ingress controller Deployment resource,您可以将参数 --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"

您可以通过 NodePort Service 访问您的病毒扫描程序。您应该已经为您的节点分配了外部 IP 地址,因此无需额外费用。

关于 Ingress 实体仅使端口 80 和 442 对外可用的说法是正确的。根据 K8s Documentation 他们似乎是这样设计的。