对 registry.redhat.io 的身份验证问题进行故障排除
红帽支持的容器镜像正从现有的红帽注册中心(registry.access.redhat.com)移到新的注册中心(registry.redhat.com)。此移动将在拉取这些容器镜像所需的身份验证方面带来变化。本文论述了如何对身份验证问题进行故障排除。
有关设置注册中心访问令牌的更多信息,请参阅 红帽容器注册中心身份验证。
要创建一个服务帐户令牌登录,请参阅 注册中心服务账户
测试身份验证
可以使用以下命令测试基本身份验证:
curl -Lv -u <username>:<password> "https://sso.redhat.com/auth/realms/rhcc/protocol/redhat-docker-v2/auth?service=docker-registry&client_id=curl&scope=repository:rhel:pull"
其中 <username> 和 <password> 是您通常用来登录到红帽客户门户网站的凭证。<password> 可以省略 ,curl 会以交互方式对此进行提示。
使用用户创建的令牌测试基本身份验证可以使用以下命令完成:
# curl -u $TOKENID:$SECRET "https://sso.redhat.com/auth/realms/rhcc/protocol/redhat-docker-v2/auth?service=docker-registry&client_id=curl&scope=repository:rhel:pull"
其中
- $TOKENID 是一个 shell 变量,其包含客户门户网站上的令牌管理界面中显示的令牌名称。 这将采用
的形式。 <account_number> 是您的红帽帐户号,<name> 是您为令牌提供的名称。| - $SECRET 是一个 shell 变量,其包含非常长的令牌值
成功的身份验证尝试将导致 HTTP 200 OK 和一个 JSON 对象,如下所示:
{"token":"<access_token>","access_token":"<access_token>","expires_in":300,"issued_at":"2018-08-13T21:28:03Z"}
其中 <access_token> 是一个非常长的访问令牌值。
以下 HTTP 401 Unauthorized 错误表示您可能尝试使用错误的凭证登录到注册中心:
{"errors":[{"code":"UNAUTHORIZED","message":"Invalid username or password","detail":[{"type":"repository","name":"rhel","actions":["pull"]}]}]}
如果使用用户凭证,请通过尝试一个新的到 红帽客户门户网站 的登录来确保它们是正确的。如果使用令牌,请确保设置了正确的 ID 和令牌值。如果您试图将其粘贴到 curl 的交互式密码提示中,输入的 secret 值可能不正确。200 OK 和 401 Unauthorized 以外的错误或响应可能表示网络问题,如防火墙、代理或其他常规的网络连接问题。
代理/防火墙
有些系统可能需要或可能已经配置为使用 Web (HTTP/HTTPS)代理访问互联网。
如果您的系统需要使用 Web 代理来访问外部站点(如 registry.redhat.io),请确保以下内容:
registry.redhat.io和sso.redhat.com应被您的代理和/或网络防火墙列入白名单\允许- 有关
quay.io的更多信息,请参阅 文章 6999582。
- 有关
- 配置 系统范围代理设置 或者 直接配置 docker 来使用代理
如果代理设置是在系统范围内配置的,则 docker、skopeo (被 atomic、podman 和 buildah 使用)和 curl 将自动使用这些设置。 否则,为了测试目的,您需要通过向 test 命令中添加 --proxy 来明确告知 curl 使用代理。 要检查 curl 是否使用代理,您可以在输出中查看以下内容:
* About to connect() to proxy proxy.example.com port 8080 (#0)
* Trying 192.168.2.100...
* Connected to proxy.example.com (192.168.2.100) port 8080 (#0)
* Establish HTTP proxy tunnel to sso.redhat.com:443
> CONNECT registry.redhat.io:443 HTTP/1.1
> Host: registry.redhat.io:443
> User-Agent: curl/7.29.0
> Proxy-Connection: Keep-Alive
>
< HTTP/1.1 200 Connection established
如果 curl 无法连接到代理,或者无法通过隧道连接到 redhat.com,这可能表示代理有问题。 如果没有使用代理,但 curl 仍然无法连接到 sso.redhat.com,这可能是系统上的防火墙或主动阻止访问的网络。 在这两种情况下,请首先联系您的网络团队,以确保连接是允许的。
使用注册中心身份验证令牌来测试到注册中心的连接
身份验证成功后,可以使用访问令牌来测试到注册中心本身的连接。这是一个使用 用户生成的身份验证令牌 来检索 容器注册中心访问令牌 的示例
curl -Lv -u $TOKENID:$SECRET "https://sso.redhat.com/auth/realms/rhcc/protocol/redhat-docker-v2/auth?service=docker-registry&client_id=curl&scope=repository:rhel:pull" | python -m json.tool
来自 SSO 服务器的响应类似如下:
{
"access_token": "eyJhbGciOiJSUzI1NiIsInR5cCIgOiAiSldUIiwiandrIjogeyJrdHkiOiJSU0EiLCJhbGciOiJSUzI1NiIsInVzZSI6InNpZyIsIm4iOiIwZjd1Rk5CWW1wbE52S1ZES1I3cUtQVkZoWmg5ZllPQ1JkeWxxSi1jM0xSaEhXUGFDOU1ucjR6eUVXY25zaUxuTFcydmVicDFBTWpNWlVNMXhNeWQ4Z0pVdmE2YjgxUXlTcWpndDl5aWNhem5fZkY0M2VHcnNkYm5xZFpsQmYxUUl5LWhsd3hvdTNXUzhVVkJha3E4dHFCdDlISGc3VFRONFR1VHl2c18tODhFT3hZNklWeTI4Y3RxTTE2VzBXQmxFdU1yd1BPdGRXVGtEUkNjUzV0ZDhBa0Y4RlpMWV9nQ2M0WG5oVTI1Nnd3Y25MTUpGcGdaZjNMZ0k1NEJIMkR6LWVnSUc1RDNmQ0NLX0FOU1llNGZuZDRoM2hEQjBCWndhdzlYM0VyZkJHZjdGX0FQMlpnN1lKcUNhS0d0RGExNzBjb2J6MGxyRTI5Mjljd2p5dm9HbElfd2syWXlPMzJiZ3prZUJ4NndxVk4tNVFmV0syUjF5MFJFaWJGc3c2dGhQQkg5Q3lMR2I4VjdPdUdZZ0JIWkw3Q09ZdF9WdWZCRHRmMzlFamZOZ3FpdFZFelRQcWtWdldYQ1NOb2xUakk1RnJ3Wkh4VVJDQkpmUldYb3BKeE16Q3VDblMzM2ZSUG5FSm53WG84anZfTFA2NEhNcE93X0x5dEhKM0puZ1p0a3dtVzJ1TnM5c3pDOFcyUDNfOWFXWVhTMGl4YUlrMU5oSnBWZmRPeGlOb3lVSmhZYXl0THZKT2xSamgwZ3FtNm1UaFZXM3dkUzV1Qzh4TnB0LTE1b1BscWpHWEFfZXNRdENaendZdE5lUXdsTUJqOG1OTDNOMXB2bnZYd0NGTG1DOWpDcVRhNGhGdlpBUVU1c0RYM1VxU1JJZW1ZWk1iSEJpaXVsNnpLdXVXcyIsImUiOiJBUUFCIn19.eyJqdGkiOiJkNTc1MWE1NC02MTFkLTQyYzYtODIzNi03NzQ5NjE3ZjU1NTciLCJleHAiOjE1MzQxOTMwOTEsIm5iZiI6MTUzNDE5Mjc5MSwiaWF0IjoxNTM0MTkyNzkxLCJpc3MiOiJodHRwczovL3Nzby5zdGFnZS5yZWRoYXQuY29tL2F1dGgvcmVhbG1zL3JoY2MiLCJhdWQiOiJkb2NrZXItcmVnaXN0cnkiLCJzdWIiOiJ0ZXN0dXNlciIsInR5cCI6IkJlYXJlciIsImF6cCI6ImRvY2tlci1yZWdpc3RyeSIsImFjY2VzcyI6W119.wS0ytJ5ov0HB72Av8PwK74Ntwa6bDKFT_wqTbTVdYb_GOYSwE8WtQOECBavuKXLWfb3_mqhh7qroXHdDMMZhsqjgs8dNSD-mg2vv",
"expires_in": 300,
"issued_at": "2018-08-13T20:32:49Z",
"token": "eyJhbGciOiJSUzI1NiIsInR5cCIgOiAiSldUIiwiandrIjogeyJrdHkiOiJSU0EiLCJhbGciOiJSUzI1NiIsInVzZSI6InNpZyIsIm4iOiIwZjd1Rk5CWW1wbE52S1ZES1I3cUtQVkZoWmg5ZllPQ1JkeWxxSi1jM0xSaEhXUGFDOU1ucjR6eUVXY25zaUxuTFcydmVicDFBTWpNWlVNMXhNeWQ4Z0pVdmE2YjgxUXlTcWpndDl5aWNhem5fZkY0M2VHcnNkYm5xZFpsQmYxUUl5LWhsd3hvdTNXUzhVVkJha3E4dHFCdDlISGc3VFRONFR1VHl2c18tODhFT3hZNklWeTI4Y3RxTTE2VzBXQmxFdU1yd1BPdGRXVGtEUkNjUzV0ZDhBa0Y4RlpMWV9nQ2M0WG5oVTI1Nnd3Y25MTUpGcGdaZjNMZ0k1NEJIMkR6LWVnSUc1RDNmQ0NLX0FOU1llNGZuZDRoM2hEQjBCWndhdzlYM0VyZkJHZjdGX0FQMlpnN1lKcUNhS0d0RGExNzBjb2J6MGxyRTI5Mjljd2p5dm9HbElfd2syWXlPMzJiZ3prZUJ4NndxVk4tNVFmV0syUjF5MFJFaWJGc3c2dGhQQkg5Q3lMR2I4VjdPdUdZZ0JIWkw3Q09ZdF9WdWZCRHRmMzlFamZOZ3FpdFZFelRQcWtWdldYQ1NOb2xUakk1RnJ3Wkh4VVJDQkpmUldYb3BKeE16Q3VDblMzM2ZSUG5FSm53WG84anZfTFA2NEhNcE93X0x5dEhKM0puZ1p0a3dtVzJ1TnM5c3pDOFcyUDNfOWFXWVhTMGl4YUlrMU5oSnBWZmRPeGlOb3lVSmhZYXl0THZKT2xSamgwZ3FtNm1UaFZXM3dkUzV1Qzh4TnB0LTE1b1BscWpHWEFfZXNRdENaendZdE5lUXdsTUJqOG1OTDNOMXB2bnZYd0NGTG1DOWpDcVRhNGhGdlpBUVU1c0RYM1VxU1JJZW1ZWk1iSEJpaXVsNnpLdXVXcyIsImUiOiJBUUFCIn19.eyJqdGkiOiJkNTc1MWE1NC02MTFkLTQyYzYtODIzNi03NzQ5NjE3ZjU1NTciLCJleHAiOjE1MzQxOTMwOTEsIm5iZiI6MTUzNDE5Mjc5MSwiaWF0IjoxNTM0MTkyNzkxLCJpc3MiOiJodHRwczovL3Nzby5zdGFnZS5yZWRoYXQuY29tL2F1dGgvcmVhbG1zL3JoY2MiLCJhdWQiOiJkb2NrZXItcmVnaXN0cnkiLCJzdWIiOiJ0ZXN0dXNlciIsInR5cCI6IkJlYXJlciIsImF6cCI6ImRvY2tlci1yZWdpc3RyeSIsImFjY2VzcyI6W119.wS0ytJ5ov0HB72Av8PwK74Ntwa6bDKFT_wqTbTVdYb_GOYSwE8WtQOECBavuKXLWfb3_mqhh7qroXHdDMMZhsqjgs8dNSD-mg2vv"
}
获取 access_token 值,并通过 Authorization: Bearer 标头传递它,如下所示:
curl -Lv -H "Authorization: Bearer $ACCESS_TOKEN" https://registry.redhat.io/v2/
成功的测试将导致 HTTP 200 OK 和一个空的 JSON 对象。这验证生成的访问令牌是否有效,更重要的是,您的系统可以访问注册中心端点。
Comments