【问题标题】:Openstack SWIFT proxy-server malformed request on S3S3 上的 Openstack SWIFT 代理服务器格式错误的请求
【发布时间】:2016-10-27 11:23:31
【问题描述】:

我正在尝试使用 Devstack(使用 devstack 配置文件 - local.conf 中的 stable/newton 分支)为开发人员设置 S3 测试台。虽然我能够使用 CLI(openstack 容器/对象,swift)浏览容器和对象,但我无法使用 s3curl 访问容器。在日志中(完整日志可在下面的链接中找到)我在请求处理的最后阶段看到两个不同的 URL:

----------“openstack container list”命令,本地发出

proxy-server: Using identity: {'service_roles': [], 'roles': [u'admin'],
'project_domain': (u'default', u'Default'), 'auth_version': 3,
'user': (u'eac0298a83e44b12b2c08aa98e9b1c9a', u'admin'),
'user_domain': (u'default', u'Default'),
'tenant': (u'2d7365b17c8147e9aead99f870125d31', u'admin')}
(txn: txda7984e9e1f04b7792920-005811ca49)
[ ... ]
proxy-server: de.vs.ta.ck de.vs.ta.ck 27/Oct/2016/09/35/05 GET
/v1/AUTH_2d7365b17c8147e9aead99f870125d31%3Fformat%3Djson HTTP/1.0
200 - osc-lib keystoneauth1/2.14.0 python-requests/2.11.1 CPython/2.7.12
a5ef5769d7ef... - 42 - txda7984e9e1f04b7792920-005811ca49 - 0.0881
- - 1477560905.352745056 1477560905.440839052 -

您在上面的请求中看到了正确的 URL。

---------- S3 会话使用来自 re.mo.te.host 的 s3curl

proxy-server: Using identity: {'service_roles': [], 'roles': [u'admin'],
'project_domain': (u'default', u'Default'), 'auth_version': 3,
'user': (u'eac0298a83e44b12b2c08aa98e9b1c9a', u'admin'),
'user_domain': (u'default', u'Default'),
'tenant': (u'2d7365b17c8147e9aead99f870125d31', u'admin')}
(txn: tx61f057911f3e475eb1962-005811c95a)
[ ... ]
proxy-server: re.mo.te.host re.mo.te.host 27/Oct/2016/09/31/07 GET / HTTP/1.0
200 - curl/7.43.0 - - 219 - tx61f057911f3e475eb1962-005811c95a - 0.2074
- - 1477560666.966339111 1477560667.173743010 -

上面的网址格式不正确,当然不会返回任何内容。代理服务器似乎有些问题 - 具有相同的信息,它会为不同类型的访问(快速客户端访问与远程 S3 访问)生成不同的请求 URL。

对于 S3 访问,我创建了 EC2 凭据:

/opt# openstack credential create --type ec2 --project admin admin '{"access" : "admin", "secret" : "adm1n0"}'
blob       :: {"access" : "admin", "secret" : "adm1n0"}
id         :: 8c6976e5b5410415bde908bd4dee15dfb167a9c873fc4bb8a81f6f2ab448a918
project_id :: 2d7365b17c8147e9aead99f870125d31
type       :: ec2
user_id    :: eac0298a83e44b12b2c08aa98e9b1c9a

当然,还有为管理员/管理员创建的容器和对象:

/opt# openstack object list c0
+----------+
| Name     |
+----------+
| list.txt |
+----------+

因此,实际上,keystone / swift /swift3 集成是可以的,问题在于访问对象存储。关于出了什么问题以及如何继续进行的任何想法? proxy-server 的完整日志以及 proxy-server.conf 可在以下链接中找到:

https://drive.google.com/drive/folders/0Bw0rWy6Euivqdi1lT3pnUElHUmc?usp=sharing

谢谢!

【问题讨论】:

    标签: openstack openstack-swift


    【解决方案1】:

    要设置完整 URL 的日志记录,请在 proxy-server.conf (https://github.com/openstack/swift3/blob/1.11/etc/proxy-server.conf-sample#L110-L118) 中使用“force_swift_request_proxy_log = true”

    在任何情况下,问题都在于容器命名不正确 - 我使用了太短的名称(例如 c0)。默认情况下,Swift 使用非美国东部地区的命名要求,因此名称“c0”似乎无效;看起来存储桶名称太短了。来自 S3 的文档 (http://docs.aws.amazon.com/AmazonS3/latest/dev/BucketRestrictions.html#bucketnamingrules) -

    符合 DNS 的存储桶名称的规则是:

    • 存储桶名称的长度必须至少为 3 且不超过 63 个字符。
    • ...

    尝试将 dns_compliant_bucket_names 选项设置为 False 或使用更长(>3 个字符)的容器名称。

    感谢 SWIFT 团队在此问题上提供的帮助。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-09-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-07-04
      • 2018-06-21
      • 1970-01-01
      相关资源
      最近更新 更多