培训
认证
Microsoft Certified: Azure Network Engineer Associate - Certifications
展示 Azure 网络基础结构、负载均衡流量、网络路由等的设计、实现和维护。
你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn。
可以创建和使用内部负载均衡器来限制访问 Azure Kubernetes 服务 (AKS) 中的应用程序。 内部负载均衡器没有公共 IP,这使得 Kubernetes 服务只能由可以访问专用 IP 的应用程序访问。 这些应用程序可以位于同一 VNET 中,也可以在另一个 VNET 中(通过 VNET 对等互连实现)。 本文介绍如何通过 AKS 创建和使用内部负载均衡器。
重要
2025 年 9 月 30 日,基本负载均衡器将停用。 有关详细信息,请查看官方公告。 如果当前使用的是基本负载均衡器,请确保在停用日期之前将其升级到标准负载均衡器。 有关升级的指导,请访问从基本负载均衡器升级 - 指南。
az --version
即可查找版本。 如果需要进行安装或升级,请参阅安装 Azure CLI。创建名为 internal-lb.yaml
的服务清单,具有服务类型 LoadBalancer
和 azure-load-balancer-internal
注释。
apiVersion: v1
kind: Service
metadata:
name: internal-app
annotations:
service.beta.kubernetes.io/azure-load-balancer-internal: "true"
spec:
type: LoadBalancer
ports:
- port: 80
selector:
app: internal-app
使用 kubectl apply
命令部署内部负载均衡器。 此命令在节点资源组中创建了一个 Azure 负载均衡器,该资源组连接到与 AKS 群集相同的虚拟网络。
kubectl apply -f internal-lb.yaml
使用 kubectl get service
命令查看服务详细信息。
kubectl get service internal-app
内部负载均衡器的 IP 地址显示在 EXTERNAL-IP
列中,如下面示例输出中所示。 在此上下文中,“外部”是指负载均衡器的外部接口。 这并不意味着它接收公共外部 IP 地址。 此 IP 地址是从 AKS 群集所在的同一子网动态分配的。
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
internal-app LoadBalancer 10.0.248.59 10.240.0.7 80:30555/TCP 2m
为负载均衡器指定 IP 地址时,指定的 IP 地址必须与 AKS 群集位于同一虚拟网络中,但不能已经将其分配给虚拟网络中的另一个资源。 例如,不应使用为 AKS 群集中 Kubernetes 子网指定的范围内的 IP 地址。 使用已分配给同一虚拟网络中另一资源的 IP 地址可能会导致负载均衡器出现问题。
可以使用 az network vnet subnet list
Azure CLI 命令或 Get-AzVirtualNetworkSubnetConfig
PowerShell cmdlet 获取虚拟网络中的子网。
有关子网的详细信息,请参阅添加具有唯一子网的节点池。
若要对内部负载均衡器使用特定的 IP 地址,有两个选项:设置服务注释或添加 loadBalancerIP 属性到负载均衡器 YAML 清单。
重要
将 LoadBalancerIP 属性添加到负载均衡器 YAML 清单将弃用以下上游 Kubernetes。 虽然当前使用情况保持不变,并且现有服务无需修改即可正常工作,但我们强烈建议改为设置服务注释。 有关服务注释的详细信息,请参阅 Azure LoadBalancer 支持的批注。
将 service.beta.kubernetes.io/azure-load-balancer-ipv4
和 service.beta.kubernetes.io/azure-load-balancer-ipv6
分别用于 IPv4 地址和 IPv6 地址来设置服务注释。
apiVersion: v1
kind: Service
metadata:
name: internal-app
annotations:
service.beta.kubernetes.io/azure-load-balancer-ipv4: 10.240.0.25
service.beta.kubernetes.io/azure-load-balancer-internal: "true"
spec:
type: LoadBalancer
ports:
- port: 80
selector:
app: internal-app
使用 kubectl get service
命令查看服务详细信息。
kubectl get service internal-app
EXTERNAL-IP
列中的 IP 地址应反映指定的 IP 地址,如下面示例输出中所示:
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
internal-app LoadBalancer 10.0.184.168 10.240.0.25 80:30225/TCP 4m
若要详细了解如何在不同的子网中配置负载均衡器,请参阅指定不同的子网。
创建名为 internal-lb-pls.yaml
的服务清单,具有服务类型 LoadBalancer
和 azure-load-balancer-internal
及 azure-pls-create
注释。 有关更多选项,请参阅 Azure 专用链接服务集成设计文档。
apiVersion: v1
kind: Service
metadata:
name: internal-app
annotations:
service.beta.kubernetes.io/azure-load-balancer-internal: "true"
service.beta.kubernetes.io/azure-pls-create: "true"
spec:
type: LoadBalancer
ports:
- port: 80
selector:
app: internal-app
使用 kubectl apply
命令部署内部负载均衡器。 此命令在节点资源组中创建了一个 Azure 负载均衡器,该资源组连接到与 AKS 群集相同的虚拟网络。 它还创建了专用链接服务对象,连接到与 Kubernetes 服务关联的负载均衡器的前端 IP 配置。
kubectl apply -f internal-lb-pls.yaml
使用 kubectl get service
命令查看服务详细信息。
kubectl get service internal-app
内部负载均衡器的 IP 地址显示在 EXTERNAL-IP
列中,如下面示例输出中所示。 在此上下文中,“外部”是指负载均衡器的外部接口。 这并不意味着它接收公共外部 IP 地址。
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
internal-app LoadBalancer 10.125.17.53 10.125.0.66 80:30430/TCP 64m
使用 az network private-link-service list
命令查看 专用链接服务对象的详细信息。
# Create a variable for the node resource group
AKS_MC_RG=$(az aks show -g myResourceGroup --name myAKSCluster --query nodeResourceGroup -o tsv)
# View the details of the Private Link Service object
az network private-link-service list -g $AKS_MC_RG --query "[].{Name:name,Alias:alias}" -o table
输出应类似于以下示例输出:
Name Alias
-------- -------------------------------------------------------------------------
pls-xyz pls-xyz.abc123-defg-4hij-56kl-789mnop.eastus2.azure.privatelinkservice
使用专用终结点,你能够通过创建的专用链接服务以专用方式连接到你的 Kubernetes 服务对象。
使用 az network private-endpoint create
命令创建专用终结点。
# Create a variable for the private link service
AKS_PLS_ID=$(az network private-link-service list -g $AKS_MC_RG --query "[].id" -o tsv)
# Create the private endpoint
$ az network private-endpoint create \
-g myOtherResourceGroup \
--name myAKSServicePE \
--vnet-name myOtherVNET \
--subnet pe-subnet \
--private-connection-resource-id $AKS_PLS_ID \
--connection-name connectToMyK8sService
可以使用以下注释来自定义 PLS 资源:
注释 | Value | 说明 | 需要 | 默认 |
---|---|---|---|---|
service.beta.kubernetes.io/azure-pls-create |
"true" |
布尔值,指示是否需要创建 PLS。 | 必须 | |
service.beta.kubernetes.io/azure-pls-name |
<PLS name> |
字符串,指定要创建的 PLS 资源的名称。 | 可选 | "pls-<LB frontend config name>" |
service.beta.kubernetes.io/azure-pls-resource-group |
Resource Group name |
字符串,指定将在其中创建 PLS 资源的资源组的名称 | 可选 | MC_ resource |
service.beta.kubernetes.io/azure-pls-ip-configuration-subnet |
<Subnet name> |
字符串,指示将部署 PLS 的子网。 此子网必须与后端池位于同一 VNET 中。 PLS NAT IP 在此子网内分配。 | 可选 | 如果为 service.beta.kubernetes.io/azure-load-balancer-internal-subnet ,则使用此 ILB 子网。 否则,使用配置文件中的默认子网。 |
service.beta.kubernetes.io/azure-pls-ip-configuration-ip-address-count |
[1-8] |
要分配的专用 NAT IP 总数。 | 可选 | 1 |
service.beta.kubernetes.io/azure-pls-ip-configuration-ip-address |
"10.0.0.7 ... 10.0.0.10" |
要分配的静态 IPv4 IP的空格分隔列表。 (目前不支持 IPv6。)IP 总数不应大于 service.beta.kubernetes.io/azure-pls-ip-configuration-ip-address-count 中指定的 IP 数。 如果指定的 IP 较少,则动态分配其余 IP。 列表中的第一个 IP 设置为 Primary 。 |
可选 | 所有 IP 都是动态分配的。 |
service.beta.kubernetes.io/azure-pls-fqdns |
"fqdn1 fqdn2" |
与 PLS 关联的 fqdn 的空格分隔列表。 | 可选 | [] |
service.beta.kubernetes.io/azure-pls-proxy-protocol |
"true" 或 "false" |
布尔值,指示是否应在 PLS 上启用 TCP PROXY 协议来传递连接信息(包括链接 ID 和源 IP 地址)。 请注意,后端服务必须支持 PROXY 协议,否则连接将失败。 | 可选 | false |
service.beta.kubernetes.io/azure-pls-visibility |
"sub1 sub2 sub3 … subN" 或 "*" |
专用链接服务可见的 Azure 订阅 ID 的空格分隔列表。 使用 "*" 向所有订阅公开 PLS(限制最少)。 |
可选 | 空列表 [] ,指示仅限基于角色的访问控制:只有在目录中具有基于角色的访问控制权限的个人才可以使用此专用链接服务。 (限制最大) |
service.beta.kubernetes.io/azure-pls-auto-approval |
"sub1 sub2 sub3 … subN" |
Azure 订阅 ID 的空格分隔列表。 这样就可以自动批准从列出的订阅到 PLS 的 PE 连接请求。 仅当可见性设置为“*”时,这才有效。 | 可选 | [] |
创建 AKS 群集时,可以指定高级网络设置。 这些设置允许你将群集部署到现有的 Azure 虚拟网络和子网中。 例如,可以将 AKS 群集部署到连接到本地环境的专用网络,并运行仅在内部可访问的服务。
有关详细信息,请参阅使用 Kubenet 或 Azure CNI 配置自己的虚拟网络子网。
在使用专用网络的 AKS 群集中部署内部负载均衡器时,不需要更改先前的步骤。 负载均衡器在与 AKS 群集相同的资源组中创建,但连接到专用虚拟网络和子网,如以下示例所示:
$ kubectl get service internal-app
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
internal-app LoadBalancer 10.1.15.188 10.0.0.35 80:31669/TCP 1m
备注
AKS 群集使用的群集标识在虚拟网络中上必须至少具有网络参与者角色。 可以使用 az aks show
命令查看群集标识,例如 az aks show --resource-group <resource-group-name> --name <cluster-name> --query "identity"
。 使用 az role assignment create
命令分配网络参与者角色,例如 az role assignment create --assignee <identity-resource-id> --scope <virtual-network-resource-id> --role "Network Contributor"
。
如果要改为定义自定义角色,则需要以下权限:
Microsoft.Network/virtualNetworks/subnets/join/action
Microsoft.Network/virtualNetworks/subnets/read
有关详细信息,请参阅添加、更改或删除虚拟网络子网。
将 azure-load-balancer-internal-subnet
注释添加到服务中,为负载均衡器指定子网。 指定的子网必须与 AKS 群集位于同一虚拟网络中。 部署后,负载均衡器 EXTERNAL-IP
地址是指定子网的一部分。
apiVersion: v1
kind: Service
metadata:
name: internal-app
annotations:
service.beta.kubernetes.io/azure-load-balancer-internal: "true"
service.beta.kubernetes.io/azure-load-balancer-internal-subnet: "apps-subnet"
spec:
type: LoadBalancer
ports:
- port: 80
selector:
app: internal-app
当已删除负载均衡器的所有服务时,负载均衡器也将被删除。
可直接删除含有任何 Kubernetes 资源的服务,例如 kubectl delete service internal-app
,它还将删除基础 Azure 负载均衡器。
要详细了解 Kubernetes 服务,请参阅 Kubernetes 服务文档。
培训
认证
Microsoft Certified: Azure Network Engineer Associate - Certifications
展示 Azure 网络基础结构、负载均衡流量、网络路由等的设计、实现和维护。