Kubernetes Ingress - TCP 是否也需要或仅 HTTP/HTTPS 流量需要 Ingress 定义?

Kubernetes Ingress - is the Ingress definition required for TCP also or only for HTTP/HTTPS traffic?

我已经在端口 9000 上定义了我的服务应用程序 运行。它不是 web/http 服务器,它只是一个服务应用程序 运行 作为 windows 服务其他应用程序连接到的端口(容器外部)。 所以我在我的服务定义和配置映射定义中定义了端口 9000。我们使用 NGINX 作为从外部访问的代理,一切正常。

Nginx 服务:

  - name: 9000-tcp
    nodePort: 30758
    port: 9000
    protocol: TCP
    targetPort: 9000

配置图:

apiVersion: v1
data:
  "9000": default/frontarena-ads-aks-test:9000
kind: ConfigMap

服务定义:

apiVersion: v1
kind: Service
metadata:
  name: frontarena-ads-aks-test
spec:
  type: ClusterIP
  ports:
  - protocol: TCP
    port: 9000
  selector:
    app: frontarena-ads-aks-test

入口定义:

apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
  name: ads-ingress
  annotations:
    kubernetes.io/ingress.class: nginx
    nginx.ingress.kubernetes.io/ssl-redirect: "false"
spec:
  rules:
    - http:
        paths:
          - path: /
            backend:
              serviceName: frontarena-ads-aks-test
              servicePort: 9000

如前所述,一切正常。我知道 TCP 用于 L4 层,HTTP 用于 L7 应用层。 我需要仅通过其主机名和端口从另一个应用程序访问我的应用程序。没有任何 HTTP Url。 所以基本上这是否意味着我实际上根本不需要我的 Ingress Controller 定义? 我根本不需要部署它? 我只需要它,如果我需要一些 URL 的 HTTP 访问,例如:hostname:port/pathA or hostname:port/pathB

对吗?对于常规 TCP 连接,我们根本不需要 Ingress YAML 定义吗?谢谢

是的,在这种情况下您根本不需要入口。根据 kubernetes 官方文档,Ingress 是:

An API object that manages external access to the services in a cluster, typically HTTP.

因此,如果您不需要通过 http 进行任何外部访问,则可以省略入口。

参考:https://kubernetes.io/docs/concepts/services-networking/ingress/