Nginx Kubernetes入口控制器-无法从外部虚拟机进行TCP连接,网络流量未转发到;服务“;港口

Nginx Kubernetes入口控制器-无法从外部虚拟机进行TCP连接,网络流量未转发到;服务“;港口,nginx,kubernetes,kubernetes-helm,azure-aks,Nginx,Kubernetes,Kubernetes Helm,Azure Aks,我有Azure Kubernetes服务集群,我有集群外的VM,来自不同的虚拟网络,我试图从中连接到我的容器吊舱应用程序,该应用程序正在TCP端口9000上运行。我不能使用公共IP,这不是HTTP连接,但我需要使用TCP连接。 为此,我遵循了此链接中的说明: 我为helm安装定义了YAML文件 controller: service: annotations: service.beta.kubernetes.io/azure-load-balancer-internal:

我有Azure Kubernetes服务集群,我有集群外的VM,来自不同的虚拟网络,我试图从中连接到我的容器吊舱应用程序,该应用程序正在TCP端口9000上运行。我不能使用公共IP,这不是HTTP连接,但我需要使用TCP连接。 为此,我遵循了此链接中的说明: 我为helm安装定义了YAML文件

controller:
  service:
    annotations:
      service.beta.kubernetes.io/azure-load-balancer-internal: "true"
我配置了nginx:

helm install nginx-ingress ingress-nginx/ingress-nginx \
    -f internal-ingress.yaml \
    --set controller.nodeSelector."beta\.kubernetes\.io/os"=linux \
    --set defaultBackend.nodeSelector."beta\.kubernetes\.io/os"=linux \
    --set controller.admissionWebhooks.patch.nodeSelector."beta\.kubernetes\.io/os"=linux
之后的NGINX配置是它有端口80和443:

kubectl get services -o wide

NAME                                        TYPE        CLUSTER-IP    EXTERNAL-IP     PORT(S)
nginx-ingress-ingress-ngingx controller  LoadBalancer   10.0.36.81    10.33.27.35     80:31312/TCP,443:30653/TCP
之后,我运行
头盔升级
确保已配置我的tcp端口9000

helm upgrade nginx-ingress ingress-nginx/ingress-nginx -f internal-ingress.yaml --set tcp.9000="default/frontarena-ads-aks-test:9000"
当我检查“kubectl get configmaps”时,这自动为我提供了ConfigMap设置:

我还编辑了我的nginx服务:

spec:
  clusterIP: 10.0.36.81
  externalTrafficPolicy: Cluster
  ports:
  - name: http
    nodePort: 31312
    port: 80
    protocol: TCP
    targetPort: http
  - name: https
    nodePort: 30653
    port: 443
    protocol: TCP
    targetPort: https
  - name: 9000-tcp
    nodePort: 30758
    port: 9000
    protocol: TCP
    targetPort: 9000
我已部署应用程序舱:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: frontarena-ads-deployment
  labels:
    app: frontarena-ads-deployment
spec:
  replicas: 1
  template:
    metadata:
      name: frontarena-ads-aks-test
      labels:
        app: frontarena-ads-aks-test
    spec:
      nodeSelector:
        "beta.kubernetes.io/os": linux
      restartPolicy: Always
      containers:
      - name: frontarena-ads-aks-test
        image: fa.dev/:test1
        ports:
          - containerPort: 9000
  selector:
    matchLabels:
      app: frontarena-ads-aks-test
---
apiVersion: v1
kind: Service
metadata:
  name: frontarena-ads-aks-test
spec:
  type: ClusterIP
  ports:
  - protocol: TCP
    port: 9000
  selector:
    app: frontarena-ads-aks-test
我在同一默认名称空间中配置并部署了入口控制器YAML,以便将我的入口连接到上述服务(我认为它可以基于ClusterIP通过它进行连接):

现在这个问题是:

如果我尝试从部署在AKS群集外部的不同虚拟网络中的VM应用程序(具有由Azure管理员配置的Ingress Controller IP或其DNS名称)和端口9000确定目标-我没有收到任何响应,从而得出结论,即Ingress Controller没有将网络连接传播到以该应用程序为目标的我的服务在我吊舱的9000端口上运行

我找不到Ingress Controller不将流量转发到我的服务的原因,我的服务的目标端口是9000,而9000是运行我的App Pod的端口


谢谢你

VM是否与AKS位于不同的VNet中?您使用哪种网络类型的AKS?@CharlesXu是的。我们使用的是Linux CNI网络。服务具有ClusterIP,NGINX使用内部负载平衡器。只需要TCP连接您知道内部入口可以在同一个VNet中访问吗?所以您需要使用VNet窥视功能。@charlessu感谢您的回复。我不是Azure的专家,这意味着应该配置什么?在internet和Stackoverflow for Ingress的所有示例中,我没有发现任何类似的示例。VM和AK位于不同的VNET和区域,因此,我们的Azure管理员使用DNS名称和IP实现了代理,该代理连接到入口控制器的10.33.x.x外部IP地址,因为W 10.33是不可路由的网络,我们需要在服务器上使用反向代理连接到它。你是说通过网络窥视吗?来自虚拟机的TELNET在代理Ip上工作!谢谢,我认为您不需要
ingres
资源,因为您已经在
服务中添加了passthrough
Configmap
apiVersion: apps/v1
kind: Deployment
metadata:
  name: frontarena-ads-deployment
  labels:
    app: frontarena-ads-deployment
spec:
  replicas: 1
  template:
    metadata:
      name: frontarena-ads-aks-test
      labels:
        app: frontarena-ads-aks-test
    spec:
      nodeSelector:
        "beta.kubernetes.io/os": linux
      restartPolicy: Always
      containers:
      - name: frontarena-ads-aks-test
        image: fa.dev/:test1
        ports:
          - containerPort: 9000
  selector:
    matchLabels:
      app: frontarena-ads-aks-test
---
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