设置:
- Azure Kubernetes 服务
- Azure 应用程序网关
我们在 Azure 中有 kubernetes 集群,它使用应用程序网关来管理网络流量。我们在负载均衡器上使用 appgw 是因为我们需要处理第 7 层的流量,因此需要处理基于路径的 http 规则。我们使用 kubernetes 入口 Controller 来配置 appgw。请参阅下面的配置。
现在我想要一个既接受 HTTP(第 7 层)又接受 TCP(第 4 层)请求的服务。
我该怎么做?暴露的端口不应该在大互联网上公开,而应该在 azure 网络上公开。我是否需要添加另一个未配置为使用 appgw 的入口 Controller ?
这是使用 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
最佳答案
通常您有两个简单的选择。
<小时/>使用直接 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/