You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过Agent IP暴露容器并配置至Azure应用网关后端池

我之前刚好处理过几乎一模一样的场景,下面是我亲测有效的实现步骤,分为容器定向部署到指定Agent节点和Azure应用网关后端池配置两大部分:

一、将容器部署到指定IP的Agent节点

要把容器精准部署到IP为10.0.0.4和10.0.0.5的Agent节点,我们可以通过Kubernetes的节点亲和性(nodeAffinity)来实现,这比nodeSelector更灵活,支持多节点匹配。

步骤1:给目标Agent节点添加自定义标签

首先给两个Agent节点打上便于识别的标签(也可以直接用节点原有标签,比如kubernetes.io/hostname,但自定义标签更直观):

# 给第一个Agent节点打标签
kubectl label nodes k8s-agentpool-75930632-0 custom-agent=10.0.0.4
# 给第二个Agent节点打标签
kubectl label nodes k8s-agentpool-75930632-1 custom-agent=10.0.0.5

步骤2:编写Deployment YAML并部署

创建一个app-deployment.yaml文件,通过nodeAffinity指定只部署到带有上述标签的节点:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: targeted-app-deployment
spec:
  replicas: 2 # 对应两个Agent节点各部署一个实例
  selector:
    matchLabels:
      app: my-targeted-app
  template:
    metadata:
      labels:
        app: my-targeted-app
    spec:
      affinity:
        nodeAffinity:
          requiredDuringSchedulingIgnoredDuringExecution:
            nodeSelectorTerms:
            - matchExpressions:
              - key: custom-agent
                operator: In
                values:
                - 10.0.0.4
                - 10.0.0.5
      containers:
      - name: my-app-container
        image: your-docker-image:latest # 替换成你的容器镜像
        ports:
        - containerPort: 80 # 替换成你的容器服务端口

执行部署命令:

kubectl apply -f app-deployment.yaml

验证部署结果

确认Pod是否运行在目标节点上:

kubectl get pods -o wide

查看输出的NODE列,应该显示两个Pod分别对应k8s-agentpool-75930632-0和k8s-agentpool-75930632-1。

二、配置Azure应用网关后端池

要让应用网关能访问到Agent节点上的容器,我们需要先把容器端口暴露到节点层面,再把节点IP和端口添加到网关后端池。

方法1:用HostPort直接映射容器端口到节点

修改Deployment的容器配置,添加hostPort,直接把容器端口映射到Agent节点的端口:

containers:
- name: my-app-container
  image: your-docker-image:latest
  ports:
  - containerPort: 80
    hostPort: 8080 # 节点上的映射端口,可自定义

更新Deployment:

kubectl apply -f app-deployment.yaml

此时,你可以通过10.0.0.4:8080和10.0.0.5:8080直接访问节点上的容器。

方法2:用NodePort Service暴露容器(更推荐)

创建一个NodePort Service来暴露容器,这种方式更符合Kubernetes的最佳实践:
创建app-service.yaml:

apiVersion: v1
kind: Service
metadata:
  name: my-app-nodeport-service
spec:
  type: NodePort
  selector:
    app: my-targeted-app # 和Deployment的标签匹配
  ports:
  - port: 80 # Service内部端口
    targetPort: 80 # 容器端口
    nodePort: 30000 # 可选:指定节点端口,不指定的话K8s会自动分配30000-32767之间的端口

部署Service:

kubectl apply -f app-service.yaml

查看分配的NodePort(如果没指定的话):

kubectl get service my-app-nodeport-service

输出中的PORT(S)列会显示80:xxxx/TCP,其中xxxx就是节点端口。

配置Azure应用网关后端池

  1. 登录Azure门户,找到你的应用网关资源。
  2. 进入后端池页面,点击添加。
  3. 在“添加后端池”界面:
    • 输入后端池名称(比如k8s-agent-backend-pool)
    • 选择“添加目标”,分别添加两个Agent节点的私有IP:10.0.0.4和10.0.0.5
    • 针对每个IP,设置对应的端口(方法1用8080,方法2用NodePort的端口)
  4. 点击“保存”,等待应用网关配置同步完成。

额外:用Azure应用网关Ingress Controller(AGIC)自动化配置

如果你已经部署了AGIC,那么可以直接通过Ingress资源让AGIC自动配置网关后端池,无需手动操作门户:
创建app-ingress.yaml:

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: my-app-ingress
  annotations:
    kubernetes.io/ingress.class: azure/application-gateway
spec:
  rules:
  - http:
      paths:
      - path: /my-app
        pathType: Prefix
        backend:
          service:
            name: my-app-nodeport-service
            port:
              number: 80

部署Ingress:

kubectl apply -f app-ingress.yaml

AGIC会自动识别Service对应的Agent节点IP和端口,同步到应用网关的后端池。

三、最终验证
  1. 测试节点IP访问容器:
curl 10.0.0.4:8080 # 替换成你的端口
curl 10.0.0.5:8080
  1. 测试应用网关转发:
    访问应用网关的公共IP或自定义域名,确认请求能正常转发到容器服务。

内容的提问来源于stack exchange,提问作者Navlesh

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.19 03:42:57