0

我已经定义了在端口 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 网址。所以基本上这是否意味着我实际上根本不需要我的 Ingress Controller 定义?我根本不需要部署它?只有当我需要使用某些 URL 进行 HTTP 访问时,我才需要它,例如:hostname:port/pathA or hostname:port/pathB

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

4

1 回答 1

3

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

管理对集群中服务的外部访问的 API 对象,通常是 HTTP。

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

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

于 2021-03-05T18:55:48.173 回答