S3上的Openstack SWIFT代理服务器格式错误的请求

时间:2016-10-27 11:23:31

标签: openstack openstack-swift

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

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

watch : {

    inputSpell : function() {
        var spellCount = this.spellCount;
        var inputSpell = this.inputSpell.toUpperCase();
        var presentSpell = this.presentSpell;

        console.log("Spell Count " + spellCount);
        console.log("Input Spell " + inputSpell);
        console.log("Present Spell" + presentSpell);

        if (inputSpell.length === 3 && inputSpell === presentSpell) {
            this.$set(this, 'inputSpell', '');
            if (spellCount === 3) {
                return this.completeCombo();
            }
            return this.fetchSpell(spellCount);
        }

        if (inputSpell.length >=3) {
            this.$set(this, 'inputSpell', '');
        }
    }
}

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

-------------使用re.mo.te.host中的s3curl进行S3会话

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访问)。

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

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 -

当然,还为admin / admin创建了容器和对象:

/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

所以,实际上,keystone / swift / swift3集成是可以的,问题在于访问对象存储。关于什么是错的以及如何继续的任何想法?代理服务器的完整日志以及proxy-server.conf可从以下链接获得:

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

谢谢!

1 个答案:

答案 0 :(得分:1)

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

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

  

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

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

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

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