azure - 能否使用应用程序网关在 AKS 中同时公开 HTTP 端口和 TCP 端口?

标签 azure kubernetes azure-aks azure-application-gateway

设置:

  • Azure Kubernetes 服务
  • Azure 应用程序网关

我们在 Azure 中有 kubernetes 集群,它使用应用程序网关来管理网络流量。我们在负载均衡器上使用 appgw 是因为我们需要处理第 7 层的流量,因此需要处理基于路径的 http 规则。我们使用 kubernetes 入口 Controller 来配置 appgw。请参阅下面的配置。

现在我想要一个既接受 HTTP(第 7 层)又接受 TCP(第 4 层)请求的服务。

我该怎么做?暴露的端口不应该在大互联网上公开,而应该在 azure 网络上公开。我是否需要添加另一个未配置为使用 appgw 的入口 Controller ?

这就是我想要实现的目标: enter image description here

这是使用 appgw 的入口 Controller 的配置:

apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
  name: service1
  labels:
    app: service1
  annotations:
    appgw.ingress.kubernetes.io/backend-path-prefix: /
    appgw.ingress.kubernetes.io/use-private-ip: "false"
    kubernetes.io/ingress.class: azure/application-gateway
spec:
  tls:
    - hosts:
      secretName: <somesecret>
  rules:
    - host: <somehost>
      http:
        paths:
          - path: /service1/*
            backend:
              serviceName: service1
              servicePort: http

当前设置: enter image description here

最佳答案

通常您有两个简单的选择。

<小时/>

使用直接 pod IP 或 Headless ClusterIP 服务。

我假设您的 AKS 群集使用 Azure CNI 或 Calico 作为网络结构。
在这两种情况下,您的 Pod 都会在 AKS 子网中获得可路由的 IP
https://learn.microsoft.com/en-us/azure/aks/concepts-network#azure-cni-advanced-networking
因此,您可以直接通过 VNet 访问它们。

<小时/>

或者,您可以使用内部负载均衡器类型的服务。
您可以通过适当的注释构建内部LB。

apiVersion: v1
kind: Service
metadata:
  annotations:
    service.beta.kubernetes.io/azure-load-balancer-internal: "true"
spec:
  type: LoadBalancer

当您查看服务详细信息时,内部负载均衡器的 IP 地址将显示在 EXTERNAL-IP 列中。在这种情况下,外部与负载均衡器的外部接口(interface)相关,而不是它接收公共(public)外部 IP 地址。
https://learn.microsoft.com/en-us/azure/aks/internal-lb#create-an-internal-load-balancer

如果需要,您可以为负载均衡器分配预定义的 IP 地址和/或将其放入 VNet 中的不同子网中,甚至放入私有(private)子网中,使用 VNet 对等互连等。
最终您可以将其从您需要的任何地方进行路由。

关于azure - 能否使用应用程序网关在 AKS 中同时公开 HTTP 端口和 TCP 端口?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68881740/

相关文章:

Azure-ML 部署看不到 AzureML 环境(版本号错误)

azure - 自动 SQL 导出失败

c# - 如何从 Visual Studio 中的包管理器控制台针对 SQL Azure 调用更新数据库?

nginx - 在Kubernetes NGINX反向代理入口 Controller 中按路径重写

kubernetes - 使用模拟获取 GKE 集群凭据后无法运行 'kubectl' 命令

azure - 使用 ARM 模板将用户分配的身份分配给 AKS 群集

azure - 托管服务身份必须配置为使用身份验证 token 策略

authentication - 移动客户端上的 Aspnet Web API 身份验证

docker - Kubernetes 部署无法下载 OpenAPI 错误

azure - 可执行 kubelogin 失败,退出代码为 1