诊断已启用 Azure Arc 的 Kubernetes 群集的连接问题
如果你在将群集连接到 Azure Arc 时遇到问题,原因也许与下面列出的问题之一有关。 我们提供了两个带有引导式帮助的流程图:一个适用于未使用代理服务器的情况,另一个适用于网络连接使用代理服务器的情况。
提示
无论你是使用 Azure CLI 还是 Azure PowerShell 来连接群集,此流程图中的步骤都适用。 但是,某些步骤需要使用 Azure CLI。 如果你尚未安装 Azure CLI,请务必在开始之前安装。
不使用代理的连接
查看此流程图,以诊断在不使用代理服务器的情况下尝试将群集连接到 Azure Arc 时遇到的问题。 下面提供了有关每个步骤的更多详细信息。
Azure 标识是否拥有足够的权限?
查看连接群集的先决条件,并确保用于连接群集的标识拥有必要的权限。
是否正在运行最新版本的 Azure CLI?
确保安装了最新版本。
如果使用 Azure PowerShell 连接了群集,请确保运行最新版本。
connectedk8s
扩展是否为最新版本?
运行以下命令将 Azure CLI connectedk8s
扩展更新到最新版本:
az extension update --name connectedk8s
如果尚未安装该扩展,可以运行以下命令来安装:
az extension add --name connectedk8s
kubeconfig 是否指向正确的群集?
运行 kubectl config get-contexts
以确认目标上下文名称。 然后,运行 kubectl config use-context <target-cluster-name>
将默认上下文设置为正确的群集。
是否注册了所有必需的资源提供程序?
确保已注册 Microsoft.Kubernetes、Microsoft.KubernetesConfiguration 和 Microsoft.ExtendedLocation 资源提供程序。
是否满足所有网络要求?
查看网络要求,并确保未阻止所需的终结点。
azure-arc
命名空间中的所有 Pod 是否都在运行?
如果一切正常,则 Pod 应全部处于 Running
状态。 运行 kubectl get pods -n azure-arc
以确认是否有任何 Pod 的状态不是 Running
。
仍有问题?
上述步骤可以解决许多常见连接问题,但如果你仍然无法成功连接,请生成故障排除日志文件,然后提交支持请求,以便我们进一步调查问题。
若要生成故障排除日志文件,请运行以下命令:
az connectedk8s troubleshoot -g <myResourceGroup> -n <myK8sCluster>
创建支持请求时,请在“其他详细信息”部分使用“文件上传”选项上传生成的日志文件。
使用代理服务器的连接
如果你在至少一台计算机上使用代理服务器,请完成无代理流程图的前五个步骤(通过资源提供程序注册)以执行基本的故障排除步骤。 然后,如果仍然遇到问题,请查看下一个流程图以了解其他故障排除步骤。 下面提供了有关每个步骤的更多详细信息。
计算机是否在代理服务器后面执行命令?
如果计算机在代理服务器后面执行命令,则需要设置所有必要的环境变量。 有关详细信息,请参阅使用出站代理服务器进行连接。
例如:
export HTTP_PROXY="http://<proxyIP>:<proxyPort>"
export HTTPS_PROXY="https://<proxyIP>:<proxyPort>"
export NO_PROXY="<cluster-apiserver-ip-address>:<proxyPort>"
代理服务器是否仅接受受信任的证书?
运行 az connectedk8s connect
命令时,请确保通过包含 --proxy-cert <path-to-cert-file>
来包含证书文件路径。
az connectedk8s connect --name <cluster-name> --resource-group <resource-group> --proxy-cert <path-to-cert-file>
代理服务器是否能够访问所需的网络终结点?
查看网络要求,并确保未阻止所需的终结点。
代理服务器是否仅使用 HTTP?
如果代理服务器仅使用 HTTP,你可以对这两个参数使用 proxy-http
。
如果为代理服务器同时设置了 HTTP 和 HTTPS,请运行 az connectedk8s connect
命令并指定 --proxy-https
和 --proxy-http
参数。 确保为 HTTP 代理使用 --proxy-http
,并为 HTTPS 代理使用 --proxy-https
。
az connectedk8s connect --name <cluster-name> --resource-group <resource-group> --proxy-https https://<proxy-server-ip-address>:<port> --proxy-http http://<proxy-server-ip-address>:<port>
代理服务器是否需要对服务间通信使用跳过范围?
如果需要使用跳过范围,请在 az connectedk8s connect
命令中使用 --proxy-skip-range <excludedIP>,<excludedCIDR>
。
az connectedk8s connect --name <cluster-name> --resource-group <resource-group> --proxy-https https://<proxy-server-ip-address>:<port> --proxy-http http://<proxy-server-ip-address>:<port> --proxy-skip-range <excludedIP>,<excludedCIDR>
azure-arc
命名空间中的所有 Pod 是否都在运行?
如果一切正常,则 Pod 应全部处于 Running
状态。 运行 kubectl get pods -n azure-arc
以确认是否有任何 Pod 的状态不是 Running
。
仍有问题?
上述步骤可以解决许多常见连接问题,但如果你仍然无法成功连接,请生成故障排除日志文件,然后提交支持请求,以便我们进一步调查问题。
若要生成故障排除日志文件,请运行以下命令:
az connectedk8s troubleshoot -g <myResourceGroup> -n <myK8sCluster>
创建支持请求时,请在“其他详细信息”部分使用“文件上传”选项上传生成的日志文件。