从 HTTP 应用程序路由迁移到应用程序路由附加产品
本文介绍如何将 Azure Kubernetes 服务 (AKS) 群集从 HTTP 应用程序路由功能迁移到应用程序路由附加产品。 HTTP 应用程序路由加载项已停用,目前不支持任何群集 Kubernetes 版本。 建议尽快迁移以维护受支持的配置。
先决条件
- 安装并配置了 Azure CLI 2.54.0 或更高版本。 运行
az --version
即可查找版本。 如果需要进行安装或升级,请参阅安装 Azure CLI。 - 安装版本 0.5.171 或更高版本的
aks-preview
Azure CLI 扩展
注意
这些步骤详细介绍了如何从不支持的配置迁移出来。 因此,AKS 无法为迁移过程中出现的问题提供支持。
更新群集的附加产品、流入量和 IP 使用情况
启用应用程序路由附加产品。
az aks approuting enable -g <ResourceGroupName> -n <ClusterName>
更新流入量,将
ingressClassName
设置为webapprouting.kubernetes.azure.com
。 移除kubernetes.io/ingress.class
注释。 还需要将主机更新为你拥有的主机,因为应用程序路由附加产品没有托管的群集 DNS 区域。 如果你没有 DNS 区域,请按照说明创建并配置一个。最初,你的入口配置将如下所示:
apiVersion: networking.k8s.io/v1 kind: Ingress metadata: name: aks-helloworld annotations: kubernetes.io/ingress.class: addon-http-application-routing # Remove the ingress class annotation spec: rules: - host: aks-helloworld.<CLUSTER_SPECIFIC_DNS_ZONE> http: paths: - path: / pathType: Prefix backend: service: name: aks-helloworld port: number: 80
正确更新后,相同的配置将如下所示:
apiVersion: networking.k8s.io/v1 kind: Ingress metadata: name: aks-helloworld spec: ingressClassName: webapprouting.kubernetes.azure.com # Set the ingress class property to refer to the application routing add-on ingress class rules: - http: host: aks-helloworld.<CLUSTER_SPECIFIC_DNS_ZONE> # Replace with your own hostname paths: - path: / pathType: Prefix backend: service: name: aks-helloworld port: number: 80
使用新的 IP 地址更新入口控制器的 IP(例如在 DNS 记录中)。 可以使用
kubectl get
找到新 IP。 例如:kubectl get svc nginx --namespace app-routing-system -o jsonpath='{.status.loadBalancer.ingress[0].ip}'
禁用 HTTP 应用程序路由附加产品。
az aks disable-addons -g <ResourceGroupName> -n <ClusterName> --addons http_application_routing
移除并删除所有 HTTP 应用程序路由资源
禁用了 HTTP 应用程序路由附加产品后,某些相关的 Kubernetes 资源可能会保留在群集中。 这些资源包括在 kube-system 命名空间中创建的 configmaps 和 secret。 若要维护干净的群集,可以删除这些资源。 使用以下
kubectl get
命令查找 addon-http-application-routing 资源:kubectl get deployments --namespace kube-system kubectl get services --namespace kube-system kubectl get configmaps --namespace kube-system kubectl get secrets --namespace kube-system
以下示例输出显示了应当删除的 configmap:
NAMESPACE NAME DATA AGE kube-system addon-http-application-routing-nginx-configuration 0 9m7s kube-system addon-http-application-routing-tcp-services 0 9m7s kube-system addon-http-application-routing-udp-services 0 9m7s
使用
kubectl delete
命令删除剩余的资源。 确保指定资源类型、资源名称和命名空间。 以下示例删除上面的 configmap 之一:kubectl delete configmaps addon-http-application-routing-nginx-configuration --namespace kube-system
针对群集中剩余的所有 addon-http-application-routing 资源重复前面的
kubectl delete
步骤。