QingStor 对象存储支持静态网站托管

使用静态网站托管功能,用户可以方便快捷地将静态网站以极低的成本托管在 QingStor 对象存储,同时允许使用自定义的域名来访问网站内容,并且支持一键开启 CDN 和 HTTPS。

下面通过具体例子来说明如何使用静态网站托管功能:

1. 向 Bucket 绑定用于静态网站托管的域名

在 “静态网站托管页面”,点击 “添加静态网站托管访问域名” 可以绑定自定义的域名,要绑定的域名必须已完成备案。

bucket_web_hosting_add_domain

2.  设置并开启静态网站托管

在 “静态网站托管” 设置页面,填写希望使用的索引页面和错误页面, 点击 “开启静态网站托管” 即可使用自定义域名访问网站内容。 此时访问静态网站域名的根路径,或者访问的路径以 “/” 结尾,将返回索引页面。 若访问发生错误,如对象不存在,将返回错误页面。

例如,设置索引页面为 “index.html”,设置错误页面为 “error.html”。 访问根路径时,将返回 “index.html”,访问 “about/” 时,将返回 “about/index.html”。 访问 “test/hello.mp4” 时,如果 “test/hello.mp4” 对象不存在,将返回 “error.html”。

bucket_web_hosting_start

开启静态网站托管后,支持修改网站所使用的索引页面和错误页面,点击 “停止静态网站托管” 可关闭托管服务。

bucket_web_hosting_stop

 3. 设置 Bucket 权限或策略并上传静态网站内容

Bucket 需要设置为 “公开可读”,或者使用存储空间策略来进行访问控制。

bucket_acl

将网站内容上传至 Bucket,推荐使用 QingStor 的命令行工具 qsctl 进行上传, 使用方法可以参考 qsctl 文档

例如使用 qsctl 的 sync 命令上传整个网站:

$ qsctl sync /path/to/website qs://test-bucket

4. 访问网站

最后,访问刚才绑定的自定义域名,即可查看网站内容。

QingStor 对象存储发布新版本 Python SDK

QingStor 对象存储发布了新版本的 Python SDK ,并已开源在 https://github.com/yunify/qingstor-sdk-python 。为说明新版本 Python SDK 和 旧版本 SDK 的区别与联系,本日志将会介绍新版本 Python SDK 的历史背景,变化革新和未来规划。在日志的最后,我们将会展示如何使用新版本的 Python SDK。

历史背景

在 QingStor 对象存储于 2016 年 1 月 6 日 开始公测时, 我们便在 qingcloud-sdk-python 中以 面向对象 形式的接口提供了 QingStor 对象存储的 Python SDK (为行文方便,我们在下文中将此 SDK 称为 旧版 Python SDK )。qingcloud-sdk-python 为 手动实现 的 SDK, 旨在提供 所有青云 QingCloud 服务 的访问。

变化革新

为了加快各语言 SDK 的开发效率,及减小各语言 SDK 的运维成本,我们决定将 SDK 的开 发及后期维护自动化。同时,考虑到移动端用户对空间的敏感,我们决定将 QingStor 对象存储的 SDK 与青云 QingCloud 的其它服务进行分离。

最终,我们于 2016 年 12 月 5 日 发布了 SDK 生成工具 Snips , 及使用 Snips 生成的六种语言 (Go, Ruby, JAVA, Swift, PHP, JS) 的 SDK, 如 qingstor-sdk-go

为了统一所有语言 SDK 的生成和维护, 我们于 2017 年 1 月 12 日 发布了 新版 Python SDK qingstor-sdk-python, (为行文方便,我们在下文中将此 SDK 称为 新版 Python SDK )。

  • qingstor-sdk-python 不再与原有的 qingcloud-sdk-python 捆绑,可以灵活地应用于更多场景。
  • qingstor-sdk-python 有着更完善的 API 设计,对开发者屏蔽了底层的细节,开发者无需关注具体的请求拼装,只需要调用对应的接口即可。

未来规划

考虑到所有语言 SDK 使用接口的统一,新版 Python SDK 的接口实现选择了 非面向对象 的形式, 即与 旧版 Python SDK 不兼容。

  • 旧版 Python SDK 除修复 Bug 外,我们将不再维护。
  • 新版 Python SDK 将由 QingStor 直接维护,享受到最及时的新功能增加, BUG 修复和技术支持。

如何使用新版 Python SDK

使用 SDK 之前请先在青云控制台申请 access key 。

准备工作

发起请求前首先建立需要初始化服务:

from qingstor.sdk.service.qingstor import QingStor
from qingstor.sdk.config import Config

config = Config('ACCESS_KEY_ID_EXAMPLE', 'SECRET_ACCESS_KEY_EXAMPLE')
service = QingStor(config)

初始化并创建 Bucket, 需要指定 Bucket 名称和所在 Zone:

bucket = qingstor.Bucket('test-bucket', 'sh1a')
output = bucket.put()

可以使用 dir(output) 的形式来获取全部可用的属性。特别的,output.headers 是一个包含返回中全部 header 的字典;如果请求失败, output.content 将会存储返回的错误信息。

Objects 操作

接下来将会展示创建,下载,删除一个 Object 的全过程:

创建 Object

with open('/tmp/sdk_bin') as f:
output = bucket.put_object(
    'example_key', body=f
)

创建一个 Object 时,允许在body中传入一个 file like 对象,也支持直接传入一个字符串。上传一个比较大的 Object 时,建议使用 file 对象,避免将全部数据一次性读入内存。

下载 Object

output = bucket.get_object('example_key')
with open(local_path, "wb") as f:
    for chunk in output.iter_content():
        f.write(chunk)

下载一个 Object 时,建议使用 output.iter_content() 来获取文件内容。如果访问 output.content ,将会把全部数据一次性读入内存。

删除 Object

output = bucket.delete_object('example_key')

使用中遇到问题请在 项目 Issues 区 或者直接提交工单反馈。

Hadoop/HBase/Spark 入侵事件通告

继前一段时间曝出大规模利用 MongoDB 和 ElasticSearch 配置漏洞进行入侵的事件之后,下一个遭遇黑客锁定的目标将包括 Hadoop , 目前已出现灾情。该入侵会给用户的 Hadoop/HBase/Spark 等以 HDFS 为存储的数据造成安全风险,请可能被此安全隐患影响的用户仔细阅读本文,并做相应的处理。

容易遭受入侵的环境:

用户自建的未配置安全验证的 Hadoop/HBase/Spark 服务,并在公网上开放了三个产品都用到的 HDFS 端口如 50070 和 HBase 的Rest服务端口如 8000。或者通过端口转发,将青云 QingCloud 提供的 Hadoop/HBase/Spark 服务的端口通过路由器、VPC 转发,曝露到公网。

入侵现象:
  • Hadoop/HBase/Spark 数据被清空
  • 留信息勒索比特币
修复办法:
  • 禁止公网开放 Hadoop/HBase/Spark 端口,例如可以在青云 QingCloud 防火墙上禁用 Hadoop/HBase/Spark 的端口,例如 50070 和8000
  • 如果对 Hadoop/HBase/Spark  的端口在路由器、VPC 上进行了端口转发,请删除该转发规则
温馨提示:

青云 QingCloud 提供的 Hadoop/HBase/Spark 服务是运行在私有网络中的,如果用户没有主动设置端口转发将 Hadoop/HBase/Spark  端口在公网曝露,不会受到该安全隐患的影响,请用户放心使用。另外,对于从大数据 Client 客户端主机直接访问 Hadoop/HBase/Spark 集群的用户,也强烈建议将 Client 主机的访问方式由密码改为 SSH Key访问以杜绝其它安全漏洞。

另外,有任何其他问题可以工单与我们联系。

SDN 网络直通服务上线

sdn_passthrough

极大提升 Docker 的网络性能

运行在虚拟机(VM)上的 Docker 可直接使用云平台的 SDN,避免两层网络的重叠带来的数据包容量损耗;

每一台 Docker Instance 均可独享一个网卡的转发能力,并使用 IaaS 平台所有网络功能。

大幅简化 Docker 的系统配置

只需通过创建网卡、使用「Hostnic」插件将网卡逐一与 Docker Instance 挂载,便可以完成对 Docker 网络的配置;

支持 Docker Instance 独立挂载 EIP,独立配置防火墙策略(SG),及挂载为负载均衡 (LB)后端。

传统 Docker 部署方案的问题

1.严重的网络性能损耗

传统的基于 VM 的 Docker 部署方案,需要采用 Overlay 或 Bridge 网络插件实现 VM 内部的虚拟网络,多次虚拟化对性能带来了重重损耗。经测试,在云平台上直接使用 Docker Overlay 会损失近 3/4 的性能。

2.配置复杂度高

主流的 Docker 管理平台需要对 IP 地址做转换,以提供业务对内网和外网的地址。本身 Docker 实现这些功能就比较复杂,而在此基础上,Docker 如果运行在云平台上则还需要对云平台的 IP 再做一层地址转换,会带来额外的复杂度。

上述问题的根源在于,云平台和 Docker 平台都有自己的 SDN 实现,功能重合,使用时需要嵌套。

SDN 网络直通解决方案的优势

SDN 网络直通功能使 Docker 可直接使用 IaaS 平台的 SDN,代替其自身的网络功能,从而达到提高性能和简化使用的目地。SDN直通包含两个方面:

1.IaaS 平台网卡管理

提供网卡接口,让虚拟主机能够挂载多个网卡,这些网卡可以属于相同或者不同的网络。每个网卡能够管理自己的私网 IP、公网 IP、负载均衡器和防火墙等功能。

2.Hostnic 插件

Hostnic 是青云开发的 Docker 网络插件。在启动 Docker 实例的时候,可以挂载虚拟主机上的网卡, 并配置 IP 地址和路由。启动之后, Docker 实例就加入了云平台 SDN 提供的网络,能够使用云平台所有的网络功能。

7 步简单操作即可赋予 Docker 应用强大的网络功能

  1. 网络规划:对于一套基于 Docker 的业务系统,有两个网络需求:A. 管理网络, 用于部署和管理云主机;B. 用户网络,用于运行基于 Docker 的业务。
  2. 启动虚拟主机,并安装 Docker。
  3. 创建网卡, 并挂载到虚拟主机上。
  4. 启用并配置 Hostnic 插件,启动 Docker 实例。
  5. 添加 Docker 实例为负载均衡器后端。
  6. 绑定防火墙。
  7. 给网卡绑定公网 IP。

* SDN 网络直通所有组件及功能均不计费。

更多详情请参看《SDN 网络直通》用户指南。