本文档介绍如何解决在将运行随用随付 (PAYG) SUSE Linux Enterprise Server (SLES) 的 Compute Engine 虚拟机实例连接到 SUSE 订阅管理工具 (SMT) 代码库时可能遇到的问题。
准备工作
- 确保该虚拟机具有关联的服务账号。
- 确保可以从虚拟机访问 Service Metadata API。
- 确保虚拟机与各个区域服务器和 SMT 服务器之间的网络连接
- 使用 sc-repocheck 工具自动排查问题。
- 查看 SUSE PAYG 问题排查指南中所述的步骤。
-
如果您尚未设置身份验证,请进行设置。身份验证用于验证您的身份,以便访问 Google Cloud 服务和 API。如需从本地开发环境运行代码或示例,您可以通过选择以下选项之一向 Compute Engine 进行身份验证:
Select the tab for how you plan to use the samples on this page:
Console
When you use the Google Cloud console to access Google Cloud services and APIs, you don't need to set up authentication.
gcloud
-
安装 Google Cloud CLI。 安装完成后,运行以下命令来初始化 Google Cloud CLI:
gcloud init如果您使用的是外部身份提供方 (IdP),则必须先使用联合身份登录 gcloud CLI。
- Set a default region and zone.
网络问题
无法解析域名
如果虚拟机无法连接到
smt-gce.susecloud.netSMT 服务器,您可能会遇到以下问题:SUSEConnect error: SocketError: getaddrinfo: Name or service not knownping: unknown host smt-gce.susecloud.net这些问题通常是因 SMT 服务器域名
smt-gce.susecloud.net解析不正确所致。此网域不可全局解析,因此您必须根据虚拟机区域设置其 IP 地址,具体操作如下:检查
/etc/hosts文件,确保它包含具有smt-gce.susecloud.net网域的条目。cat /etc/hosts | grep -i smt输出类似于以下内容,但 IP 地址可能不同:
# Added by SMT registration do not remove, retain comment as well 108.59.80.221 smt-gce.susecloud.net smt-gce如果
/etc/hosts文件包含与上述示例不同的行,请执行以下操作:从 SUSE SMT IP 地址列表查找与您的虚拟机区域对应的 IP 地址。
修改该文件,添加 SUSE SMT IP 地址和缺少的任何其他信息。
网络不可用
即使虚拟机能够解析 Compute Engine 更新服务器域名,您也可能会由于网络不可用而遇到以下错误:
Unexpected exception. Not ready to read within timeout.Repository 'SLE-Module-Adv-Systems-Management12-Pool' is invalid. Repository 'SLE-Module-Adv-Systems-Management12-Updates' is invalid.以下是您在调查期间可能会在
/var/log/cloudregister日志文件中发现的一些错误示例:WARNING:Unable to remove client registration from server WARNING:HTTPSConnectionPool(host='smt-gce.susecloud.net', port=443): Max retries exceeded with url: /connect/systems (Caused by NewConnectionError(': Failed to establish a new connection: [Errno 110] Connection timed out',)) INFO:Region server arguments: ?regionHint=europe-central2 ERROR:No response from: [('34.118.112.80', None), ('34.116.251.218', None), ('34.116.224.144', None)]如需详细了解问题的原因,请执行网络连接测试。以下示例展示了如何使用
cURL测试 HTTPS 连接:curl -sSI -m 5 -o /dev/null \ -w 'Response code (>0 is OK): %{http_code}\n' \ 'https://smt-gce.susecloud.net'该命令的输出包含 HTTP 响应代码或错误消息。下面是常见响应和错误:
成功响应:
Response code (>0 is OK): 200请求超时错误:
Response code (>0 is OK): 000 curl: (28) Connection timed out after 5001 milliseconds无法解析网域错误:
Response code (>0 is OK): 000 curl: (6) Could not resolve host: smt-gce.susecloud.net
在某些情况下(例如严格的主机防火墙规则),与
smt-gce.susecloud.net网域关联的默认 IP 地址可能不可用。若要确保问题不仅与当前 IP 地址相关,请对备用区域服务器执行网络连接测试。检索区域服务器的列表:转到 SUSE WebUI,获取区域更新服务器列表。
使用
pint工具通过 CLI 获取区域级更新服务器列表。安装必需的软件包
sudo zypper install python3-susepubliccloudinfo使用带特定区域的以下命令
pint google servers --region us-central1成功的输出包含 XML 格式的条目列表
<?xml version='1.0' encoding='UTF-8'?> <servers> <server ip="146.148.73.14" name="" region="us-central1" type="regionserver-sles"/> <server ip="162.222.182.90" name="" region="us-central1" type="regionserver-sap"/> <server ip="108.59.80.221" name="smt-gce.susecloud.net" region="us-central1" type="smt"/> <server ip="108.59.85.41" name="smt-gce.susecloud.net" region="us-central1" type="smt"/> <server ip="108.59.80.58" name="smt-gce.susecloud.net" region="us-central1" type="smt"/> </servers>
如需查找 Google Cloud的 SUSE 服务器 IP 的完整列表,请查看以下文档:
虚拟机配置错误可能会导致网络不可用。如果您遇到问题,请执行网络诊断来确定根本原因。
注册失败
如果您的虚拟机在 Cloud NAT 中具有专用 IP 地址,您可能会遇到以下错误:
ERROR: Registration failed: Registering system to registration proxy https://smt-gce.susecloud.net command '/usr/bin/zypper --non-interactive refs Python_3_Module_x86_64' failed Error: zypper returned 4 with 'Problem retrieving the repository index file for service 'Python_3_Module_x86_64': Timeout exceeded when accessing 'https://smt-gce.susecloud.net/services/2045/repo/repoindex.xml?credentials=Python_3_Module_x86_64'.如需解决此问题,请查看 Cloud NAT 配置,并验证您是否已将每个虚拟机实例的端口数下限参数设置为至少 256。
如需了解详情,请参阅 Cloud NAT 后面的 Compute Engine 实例注册和 zypper 失败 SUSE 支持公告。
无响应
如果您的虚拟机在与更新服务器和区域服务器通信时遇到问题,您可能会看到以下错误:
SUSEConnect错误:SUSEConnect error: Errno::ETIMEDOUT: Connection timed out - connect(2) for "smt-gce.susecloud.net" port 443zypper错误:Error retrieving metadata for 'SLE-Module-Adv-Systems-Management12-Pool': Not ready to read within timeout. ...
如果更新服务器和区域服务器不响应,则可能会出现这些错误。若要验证是否属于这种情况,请检查
/var/log/cloudregister日志中是否存在类似内容:INFO:Region server arguments: ?regionHint=europe-central2 INFO:Using API: regionInfo INFO:Region server arguments: ?regionHint=europe-central2 INFO:Getting update server information, attempt 1 INFO: Using region server: 130.211.242.136 ERROR: No response from: 130.211.242.136 INFO: Using region server: 35.187.193.56 ERROR: No response from: 35.187.193.56 INFO: Using region server: 162.222.182.90 ERROR: No response from: 162.222.182.90 INFO: Using region server: 130.211.88.88 ERROR: No response from: 130.211.88.88 ERROR: None of the servers responded ERROR: Attempted: [IPv4Address('130.211.242.136'), IPv4Address('35.187.193.56'), IPv4Address('162.222.182.90'), IPv4Address('130.211.88.88')] ... ... ... ERROR:Request not answered by any server after 3 attempts ERROR:Exiting without registration如需解决此问题,请尝试以下一项或多项操作:
确认该虚拟机具有外部 IP 地址,或者 Virtual Private Cloud 子网使用 NAT(Cloud NAT 或自定义解决方案)。
如果您修改了默认网络路由规则(例如限制公共互联网访问或通过本地网络路由流量),请执行以下操作,通过默认的 Compute Engine 网关为 SMT IP 手动添加路由:
前往 Google Cloud 控制台中的路由页面。
在路由管理标签页下,查找包含 SUSE SMT IP 地址的路由,并验证其 Compute Engine 默认网关是否为下一个跃点。
如果缺少路由,请点击创建路由并输入必要信息来添加路由。
如果您使用的是内部直通式网络负载均衡器,以及其他中间网络软件(例如防火墙或自定义 NAT),请执行以下操作,确保该负载均衡器是虚拟机流量的下一个跃点:
在 Google Cloud 控制台中,前往虚拟机实例页面。
点击要检查的虚拟机的名称。虚拟机详情页面随即打开。
在网络接口部分中,点击查看详细信息。
在防火墙和路由详细信息部分中,找到用于定义所选 IP 地址范围的路径的路由。
点击相应路由的名称,并确认内部直通式网络负载均衡器或其 IP 地址是下一个跃点。
如果没有路由定义所选 IP 地址范围的路径,或者该路由的下一个跃点与内部直通式网络负载均衡器不同,则设置内部直通式网络负载均衡器作为下一个跃点。
如果您使用的是内部直通式网络负载均衡器,请确认它与虚拟机位于同一区域。
在 Google Cloud 控制台中,前往虚拟机实例页面。
找到您要检查的虚拟机并记下其区域。
前往 Google Cloud 控制台中的负载均衡页面。
找到所使用的内部直通式网络负载均衡器,并检查该负载均衡器是否与虚拟机位于同一区域。
如果虚拟机和内部直通式网络负载均衡器不在同一区域,请启用全球访问权限。
代理背后的注册
如果您的虚拟机使用非透明代理或执行中间人 (PITM) 检查的其他软件(例如 Barracuda CloudGen 防火墙、Palo Alto),则可能会遇到问题。以下示例演示了如何尝试通过 HTTP 代理注册 SLES。
ERROR: Baseproduct registration failed ERROR: Registering system to registration proxy https://smt-gce.susecloud.net Announcing system to https://smt-gce.susecloud.net ... SUSEConnect error: Net::HTTPFatalError: 503 "Service Unavailable"
SUSE 并不正式支持在 Compute Engine 上通过中间人 (PITM) 代理和非透明代理注册 SLES。由于证书锁定,在注册期间 PITM 代理配置失败。
我们建议您使用 Cloud NAT 配置或设置自定义 SMTP 服务器。
VPC Service Controls 违规
如果您的组织使用 VPC Service Controls (VPC-SC),注册可能会失败,并且您可能会看到
Request is prohibited by organization's policy错误消息。如果您未在 VPC-SC 政策中为 SUSE 更新基础架构配置例外情况,则入站或出站违规可能会导致此失败。如需解决此问题,请将以下组件添加到 VPC-SC 政策中的许可名单,以允许虚拟机与 SUSE 更新基础架构通信:
- 更新了基础设施项目:
Suse-gce-smt(项目编号:778092048372) - 服务账号:
778092048372@project.gserviceaccount.com - 所需方法:
compute.alpha.InstancesService.GetLicenses
操作系统配置问题
注册状态未知
如果您不知道随用随付 (PAYG) SUSE Linux Enterprise Server (SLES) 是否已注册,请运行以下命令:
sudo SUSEConnect --status-text输出包含 SUSE 产品(包括 SUSE Linux Enterprise Server)的版本和注册状态。
Installed Products: ------------------------------------------ SUSE Linux Enterprise Server 12 SP5 (SLES/12.5/x86_64) Registered ------------------------------------------ ...如果状态为
Not Registered,请重新注册虚拟机以解决此问题:sudo registercloudguest --force-new基础产品符号链接不正确
如果基础产品链接指向错误的产品文件,您可能会遇到以下错误:
2020-06-17 12:03:56,124 ERROR:Unable to obtain product information from server "108.59.85.41,None" Unprocessable Entity {"type":"error","error":"Unmet product dependencies, activate one of these products first: SUSE Linux Enterprise Server 12 x86_64, SUSE Linux Enterprise Server for SAP Applications 12 x86_64, SUSE Linux Enterprise Server 12 SP1 x86_64, ...","localized_error":"..."} Unable to register modules, exiting.当
/etc/products.d/baseproduct符号链接指向不正确的产品文件(例如sle-module-toolchain.prod)时,就会发生此错误。若要解决此问题,请更新
/etc/products.d/baseproduct处的符号链接,使其指向相应的基础产品文件:导航到
/etc/products.d目录cd /etc/products.d如果您已安装 SLES for SAP,请运行以下命令,并将
SLES.prod替换为SLES_SAP.prod:sudo ln -sf SLES.prod baseproduct
实例身份信息不可用
如果实例身份信息不适用于虚拟机,您可能会遇到以下错误。如果服务账号未附加到实例,或者附加的服务账号已停用,则可能会出现此问题。
ERROR:Data collected from stderr for instance data collection "b'Unable to access instance identity information\n'"
如需访问身份令牌的实例元数据,所有虚拟机都必须具有关联的服务账号。
如需了解详情,请参阅公有云基础架构更新。
如需检查虚拟机的服务账号的状态,请在虚拟机上运行以下命令:
curl -s -H 'Metadata-Flavor: Google' \ 'http://metadata.google.internal/computeMetadata/v1/instance/service-accounts/default/identity?audience=test'返回身份令牌的成功响应示例:
eyJhbGciOiJSUzI1NiIsImtpZCI6IjkzOTd0MDQxSHQ2NDNxNzkzUjY1MDIwNzEyMjZPNnppaTdqNTl3eTciLCJ0eXAiOiJKV1QifQ.eyJhdWQiOiJ0ZXN0IiwiYXpwIjoiMjY1MDIwMDUyMzgzMjYyNTk0ODU2IiwiZXhwIjoxNjgzNzEyNTQzLCJpYXQiOjE2ODM3MTI4NjQsImlzcyI6Imh0dHBzOi8vYWNjb3VudHMuZ29vZ2xlLmNvbSIsInN1YiI6IjQ1NjA2MzQ5MDg5Mzc0Njg3ODI5NyJ9.EpzQ3NZ8mKStdpH10fL34qsKG0rjQEflzvLJLm2tVNX4xBJAkMhi8lcs5InUEY-QMK3njgbzdzNtD1fXoIfKoeWsqkA8vG3NkBz5zqRrtaB2STcO14H5tjIdTBsrCtET447tRXlGG5cvgMcWnRDZG92-jUZEpWki_Ri4T69X5-bBWkfE2Thm3oSUW4fScdeVOEmOgWnzD2jeVqQ_2YniywvpkT-rLzKfN-5AgN66zgBfXqJVTC90KFMebfiaOoL7z6ZSM9AjZGf45QEMZjxjd-Xzyee6ZWK8s0RE3hJlytb3zYcLt3tJwQ1WhnrC2ToJ-ZmKxxK3xKDLCvCQ6Ny5to
如果虚拟机不受影响,您会收到一个令牌。如果虚拟机受到影响,返回的元数据将是类似于以下内容的错误消息:
{ "error": "invalid_request", "error_description": "Service account not enabled on this instance" }如需解决此问题,请执行以下步骤:
停止虚拟机:
gcloud compute instances stop VM_NAME将服务账号添加到虚拟机:
gcloud compute instances set-service-account VM_NAME \ --service account SERVICE_ACCOUNT \ --no-scopes启动该虚拟机:
gcloud compute instances start VM_NAME添加缺少的服务账号后,请从虚拟机运行以下命令来重新注册 SLES:
sudo registercloudguest --force-new
缺少必需的软件包
如果您的虚拟机缺少
cloud-regionsrv-client、regionServiceClientConfigGCE、cloud-netconfig-gce或suseconnect-ng等必需软件包,注册可能会失败。如需解决此问题,请安装必需的软件包,清理注册文件,然后重新注册虚拟机。
安装所有缺失的软件包。
sudo zypper install PACKAGE_NAME将
PACKAGE_NAME替换为缺失的软件包的名称。清理旧注册文件:
sudo registercloudguest --clean sudo SUSEConnect --cleanup sudo rm -f /etc/zypp/credentials.d/* sudo rm -f /etc/zypp/repos.d/* sudo rm -f /etc/zypp/services.d/*重新注册虚拟机:
sudo registercloudguest --force-new
错误的 python3 符号链接
如果您运行
registercloudguest并看到ModuleNotFoundError: No module named 'requests'错误,则可能是/usr/bin/python3符号链接不正确所致,例如,您手动覆盖了该链接。Traceback (most recent call last): File "/usr/sbin/registercloudguest", line 34, in <module> import requests ModuleNotFoundError: No module named 'requests'
如需解决此问题,请重新创建符号链接,使其指向正确的 Python 版本。
确认实例上安装的 Python 版本:
sudo zypper info python3检查
python3符号链接:ls -ll /usr/bin | grep -i python3如果链接不正确,请将其移除,然后创建一个指向正确 Python 版本(例如
python3.6)的新链接:sudo rm /usr/bin/python3 sudo ln -sf /usr/bin/python3.6 /usr/bin/python3
SSL 证书验证失败
如果
/etc/pki/trust/anchors目录中缺少证书文件,您可能会看到Curl error 60或ssl.SSLError: [SSL: CERTIFICATE_VERIFY_FAILED]等错误。下面是一个更详细的示例,展示了您可能会在/var/log/cloudregister中看到的错误:Traceback (most recent call last): File "/usr/lib/python3.6/site-packages/urllib3/connectionpool.py", line 677, in urlopen ... File "/usr/lib64/python3.6/ssl.py", line 689, in do_handshake self._sslobj.do_handshake() ssl.SSLError: [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed (_ssl.c:852)
您可以运行以下命令并查看是否输出为空,以确认证书文件是否缺失:
ls -lart /etc/pki/trust/anchors如果缺少证书,输出应为空:
total 0要解决此问题,请尝试以下方法之一:
方法 1:清理并重新注册
清理与注册相关的所有文件,然后强制执行新的注册。注册过程会从区域服务器下载必要的证书。
sudo registercloudguest --clean && \ sudo SUSEConnect --cleanup && \ sudo rm -f /etc/zypp/credentials.d/* && \ sudo rm -f /etc/zypp/repos.d/* && \ sudo rm -f /etc/zypp/services.d/* && \ sudo rm -f /etc/pki/trust/anchors/* && \ sudo sed -i '/^# Added by SMT reg/,+1d' /etc/hosts && \ sudo registercloudguest --force-new方法 2:从正常运行的实例复制证书
如果清理并重新注册无法解决问题,您可以从正常运行的实例复制证书文件,方法是使用
gcloud compute scp或将正常运行的实例的启动磁盘附加到出现故障的实例。如果您在
MOUNT_PATH处挂接并装载正常运行的实例的磁盘,请运行以下命令:sudo cp MOUNT_PATH/etc/pki/trust/anchors/* /etc/pki/trust/anchors/ sudo update-ca-certificates sudo cp -pr MOUNT_PATH/usr/lib/regionService /usr/lib/regionService sudo registercloudguest --force-new
libzypp 软件包不兼容
采用 SLES for SAP 15 的 PAYG SUSE 虚拟机可能无法注册,并显示类似于以下内容的错误:
ERROR:Baseproduct registration failed Registering system to registration proxy https://smt-gce.susecloud.net ... command '/usr/bin/zypper --non-interactive refs SUSE_Linux_Enterprise_Server_for_SAP_Applications_x86_64' failed Error: zypper returned 1 with 'Error occurred while setting download (curl) options for 'https://smt-gce.susecloud.net/services/2294?credentials=SUSE_Linux_Enterprise_Server_for_SAP_Applications_x86_64': Unexpected exception. Unknown error reading from 'plugin:/susecloud?credentials=SUSE_Linux_Enterprise_Server_for_SAP_Applications_x86_64&path=/services/2294' ... - Error occurred while setting download (curl) options for 'https://smt-gce.susecloud.net/services/2294?credentials=SUSE_Linux_Enterprise_Server_for_SAP_Applications_x86_64':
如果
libzypp软件包的更新导致libcurl4软件包的版本不兼容,则可能会出现此问题。当libzypp尝试自行更新时,它无法再使用libcurl4向软件包位置发出请求。如需解决此问题,请手动更新
libzypp软件包。以下命令是一个示例,您可能需要调整版本号:sudo rpm -i libzypp-17.31.31-150400.3.52.2.x86_64.rpm操作系统版本不受支持或软件包过时
如果您运行的操作系统版本已超出其常规支持期限(例如,SLES 12 SP4 的常规支持已于 2020 年 6 月 30 日结束),则注册可能会失败。此故障可能是因为虚拟机上的过时软件包无法与 SUSE 更新基础架构通信。即使网络连接似乎部分成功(例如,使用
telnet连接到 SMT 服务器时返回403 Forbidden错误),您也可能会在/var/log/cloudregister日志文件中看到有关无法访问的 IP 的错误。如需查看软件包是否已过时,您可以查看其安装日期。超过一年未更新的软件包可能已过时。如需查看软件包的上次更新时间,请使用以下命令:
rpm -qa --qf '%{NAME}-%{VERSION} : %{INSTALLTIME:date}\n' | grep PACKAGE_NAME如需解决此问题,请升级到受支持的 SLES 版本。您可能还需要按照 SUSE 技术信息文档 (TID)中所述更新特定软件包。
如未另行说明,那么本页面中的内容已根据知识共享署名 4.0 许可获得了许可,并且代码示例已根据 Apache 2.0 许可获得了许可。有关详情,请参阅 Google 开发者网站政策。Java 是 Oracle 和/或其关联公司的注册商标。
最后更新时间 (UTC):2025-12-04。
[[["易于理解","easyToUnderstand","thumb-up"],["解决了我的问题","solvedMyProblem","thumb-up"],["其他","otherUp","thumb-up"]],[["很难理解","hardToUnderstand","thumb-down"],["信息或示例代码不正确","incorrectInformationOrSampleCode","thumb-down"],["没有我需要的信息/示例","missingTheInformationSamplesINeed","thumb-down"],["翻译问题","translationIssue","thumb-down"],["其他","otherDown","thumb-down"]],["最后更新时间 (UTC):2025-12-04。"],[],[]] -