首页 文章 精选 留言 我的

精选列表

搜索[终端无边界访问控制系统],共10000篇文章
优秀的个人博客,低调大师

使用 TLS 认证远程访问 Docker 【已翻译100%】

通常情况下Docker只在 UNIX socket下生效. 一般只有本地调用生效. 如果要远程调用可以有以下三种方式: 使用nginx转发通讯到Docker 用SSH和socat处理链路 创建Docker daemon监听开放的端口 第一种实现起来比较繁琐. 第二种需要在客户端服务端安装 socat. 由于其连接未加密,任何人都可以拦截Docker的通讯信息. 直到有了 Docker implemented TLS auth in 0.10才完美的解决了这个问题. 有三种简单的方式来实现: I. 生成证书 需要生成三种证书类型: CA 证书用来生成客户端和服务端证书 远端Docker使用的客户端生疏 服务端使用的Docker daemon证书 我用Ruby写了生成这三种证书的代码.你只需要拷贝相关的代码 clone this repository 并运行下面的命令: $ gem install certificate_authority $ ruby certgen.rb example.com CA certificates are in ~/.docker/ca Client certificates are in ~/.docker Server certificates are in ~/.docker/example.com 证书都生成在~/.dockerpath下. II. 拷贝服务端证书到远端 脚本生成 Docker daemon需要的键值和证书~/.docker/example.com(example.com 是你的域名). 在服务端拷贝到~/.dockerdirectory下: rsync -ave ssh ~/.docker/example.com/ root@example.com:~/.docker/ III. 在远端配置Docker Docker daemon在0.10后支持--tlsverify 来提供加密的远端连接 假设你是用的是 Ubuntu 12.04 LTS并已经安装了Docker .其它环境下可能有些不同. 只需要在/etc/default/docker加入下面配置: DOCKER_OPTS="--tlsverify -H=unix:///var/run/docker.sock -H=0.0.0.0:4243 --tlscacert=/root/.docker/ca.pem --tlscert=/root/.docker/cert.pem --tlskey=/root/.docker/key.pem" 之后重启 Docker daemon: service docker restart 如果有错Docker daemon就会启动不了. 可以通过 under/var/log/upstart/docker.log来调试. 就是这么简单! 现在通过--tlsverify就能连接到远端Docker实例了: docker --tlsverify -H tcp://example.com:4243 images 它会使用 ~/.docker下的证书来验证连接. 如果使用的是其他的类型, 可以通过--tls* 来查询docker --help的帮助文档 documentation. 官方的TLS创建网址在这里 can be found on Docker site.

优秀的个人博客,低调大师

Openstack 通过 SQLAlchemy-ORM 访问数据库

目录 目录 Demo SQLAlchemy 数据库的初始化 数据库的操作实现 数据库的操作请求 全部查询 单个查询 创建 更新 删除 Demo Github/JmilkFan/my-code-repertory/openstack SQLAlchemy SQLAlchemy 是 Python 下的一款开源软件。提供了 SQL 和对象关系映射(ORM/Object Relational Mappers)工具。使开发者可以像操作对象一般的操作数据库。 SQLAlchemy 1.1 Documentation SQLAlchemy 1.0 Documentation 数据库的初始化 在部署 Openstack Services 的过程中需要为这些 Services 创建数据库 : CREATE DATABASE glance; 这时我们其实仅仅是建立了数据库而已, 但是数据库中并没有表结构, 所以 Openstack Services 还提供了一条初始化(同步)数据库的指令 : glance-manage db_sync 下面是 db_sync的代码实现方式: # octopunch/octopunch/db/sqlalchemy/migrate_repo/versions/001_octopunch_init.py def define_tables(meta): vcenters = Table( 'vcenters', meta, Column('created_at', DateTime), Column('updated_at', DateTime), Column('deleted_at', DateTime), Column('uuid', String(length=45), primary_key=True), Column('vc_value', String(length=255)), Column('name', String(length=255)), Column('vcs_ip', String(length=255), nullable=False), Column('username', String(length=255), nullable=False), Column('password', String(length=255), nullable=False), mysql_engine='InnoDB' ) 这些 Table 的定义就是我们数据库表结构的定义, 它会在我们执行数据库初始化指令的时候被用于表的创建. 数据库的操作实现 Openstack Services 对数据库的操作一般就是对数据库中的资源表的操作, 也就是对资源的操作, 所以我们先看看 Openstack 中的资源是怎么定义的. octopunch/octopunch/api/v1/router.py mapper.connect() 将Resource URL & Action方法 & Controller & HTTP函数 绑定到一起, 实现HTTP请求/资源/操作函数的一一对应. from octopunch.api.v1 import vcenter class APIRouter(octopunch.api.openstack.APIRouter): ... def _setup_routes(self, mapper, ext_mgr): self.resources['versions'] = versions.create_resource() mapper.connect("versions", "/", controller=self.resources['versions'], action='show') mapper.redirect("", "/") self.resources['vcenters'] = vcenter.create_resource(ext_mgr) mapper.resource('vcenter', 'vcenters', controller=self.resources['vcenters']) octopunch/octopunch/api/v1/vcenter.py 每一个 Resource 都会对应有一个 Controller 的类定义, 包含了对应的 Action 方法的实现. class VcenterController(wsgi.Controller): ... def index(self, req): """Show all vcenter list.""" context = req.environ['octopunch.context'] vcenters = self.vcenter_api.vcenter_list(context) return {'vcenters':vcenters} ... def create_resource(ext_mgr): """Vcenter resource factory method.""" return wsgi.Resource(VcenterController(ext_mgr)) octopunch/octopunch/vsphere/vcenter/api.py 在 Resource 目录下的 api.py 文件中定义对数据库的操作接口. from octopunch.db import base class API(base.Base): def vcenter_list(self, context, filters=None): """Get vcenter list. :param context: class:`RequestContext` instance :param filters: select data by filter. :type: ``dict`` :return: return a list of class:`VenterInfo` instance """ return self.db.vcenter_get_all(context, filters) octopunch/octopunch/db/api.py 这一层 API 接口决定使用哪种 ORM 实现和数据库类型, 而且还定义了对应 vcenter/api.py 中数据库操作接口的函数. 这样做是为了支持 Openstack 数据库的异构性. 首先需要在 octopunch/octopunch/db/base.py 中使用self.db.dispose_engine()方法让 Openstack 与数据库建立连接. # octopunch/octopunch/db/base.py class Base(object): """DB driver is injected in the init method.""" def __init__(self, db_driver=None): # NOTE(mriedem): Without this call, multiple inheritance involving # the db Base class does not work correctly. super(Base, self).__init__() if not db_driver: db_driver = CONF.db_driver self.db = importutils.import_module(db_driver) # pylint: disable=C0103 self.db.dispose_engine() # octopunch/octopunch/db/api.py from oslo_db import concurrency as db_concurrency ... # 指定使用 SQLALchemy, 并指定了 SQLAlchhemy 的接口路径 _BACKEND_MAPPING = {'sqlalchemy': 'octopunch.db.sqlalchemy.api'} IMPL = db_concurrency.TpoolDbapiWrapper(CONF, _BACKEND_MAPPING) ... def vcenter_get_all(context, filters=None): """Get the vcenter list. :param context: class:`RequestContext` instance :param filters: select data by filters. :type: ``dict`` :return: return a list of class:`VcenterInfo` instance. """ return IMPL.vcenter_get_all(context, filters=filters) octopunch/octopunch/db/sqlalchemy/api.py 这里是 SQLAlchemy 操作数据库的具体实现, EG: 查询 @require_context def vcenter_get_all(context, filters=None): session = get_session() with session.begin(): vcenters_info = session.query(models.Vcenter).all() return vcenters_info ORM 的数据库操作方式中, 很重要一部分就是 Table Mapping Class 的实现: # octopunch/octopunch/db/sqlalchemy/models.py class Vcenter(BASE, OctopunchBase): """Represents the vcenter list.""" __tablename__ = 'vcenters' vc_value = Column(String(255)) name = Column(String(255)) vcs_ip = Column(String(255), nullable=False) username = Column(String(255), nullable=False) password = Column(String(255), nullable=False) datacenters = relationship('Datacenter', backref='vcenters', foreign_keys='Datacenter.vcenter_uuid', primaryjoin='Vcenter.uuid ==' 'Datacenter.vcenter_uuid') 将上述的 Table 定义映射为 Class之后, 我们就可以通过对 Class instance 的操作来实现对数据库 Table 的操作. 数据库的操作请求 在调试的时候我们可以在客户端通过 curl 指令来发送 HTTP 请求, 一般来说对每个 Resource 的 HTTP 请求都具有下面 5 种类型, 每一种类型都应该在 api/v1/resourceName.py 文件下(针对本文而言, 其实可以有多种实现方式)有相应的 Action 实现函数, 当然我们还可以自定义更多的实现方法. 全部查询 GET <==> show curl -i 'http://<Service_host_ip>:<service_port>/v1/<project_id>/<ResourceUrl>' -X GET -H "Acceptn" -H "X: admin" -H "X-Auth-Token: <token_id>" 单个查询 GET <==> index curl -i 'http://<Service_host_ip>:<service_port>/v1/<project_id>/<ResourceUrl>/<ResourceID>' -X GET -H "Acceptn" -H "X-Auth-Project-Id: admin" -H "X-Auth-Token: <token_id>" 创建 POST <==> create curl -i 'http://<Service_host_ip>:<service_port>/v1/<project_id>/<ResourceUrl>' -X POST -H "Content-Type: application/json" -H "X-Auth-Project-Id: admin" -H "X-Auth-Token: <token_id>" -d '<body_content_dict>' 更新 PUT <==> update curl -i 'http://<Service_host_ip>:<service_port>/v1/<project_id>/<ResourceUrl>/<ResourceID>' -X PUT -H "Content-Type: application/json" -H "X-Auth-Project-Id: admin" -H "X-Auth-Token: <token_id>" -d '<body_content_dict>' 删除 DELETE <==> delete curl -i 'http://<Service_host_ip>:<service_port>/v1/<project_id>/<ResourceUrl>/<ResourceID>' -X DELETE -H "Acceptn" -H "X-Auth-Project-Id: admin" -H "X-Auth-Token: <token_id>"

资源下载

更多资源
腾讯云软件源

腾讯云软件源

为解决软件依赖安装时官方源访问速度慢的问题,腾讯云为一些软件搭建了缓存服务。您可以通过使用腾讯云软件源站来提升依赖包的安装速度。为了方便用户自由搭建服务架构,目前腾讯云软件源站支持公网访问和内网访问。

Nacos

Nacos

Nacos /nɑ:kəʊs/ 是 Dynamic Naming and Configuration Service 的首字母简称,一个易于构建 AI Agent 应用的动态服务发现、配置管理和AI智能体管理平台。Nacos 致力于帮助您发现、配置和管理微服务及AI智能体应用。Nacos 提供了一组简单易用的特性集,帮助您快速实现动态服务发现、服务配置、服务元数据、流量管理。Nacos 帮助您更敏捷和容易地构建、交付和管理微服务平台。

Spring

Spring

Spring框架(Spring Framework)是由Rod Johnson于2002年提出的开源Java企业级应用框架,旨在通过使用JavaBean替代传统EJB实现方式降低企业级编程开发的复杂性。该框架基于简单性、可测试性和松耦合性设计理念,提供核心容器、应用上下文、数据访问集成等模块,支持整合Hibernate、Struts等第三方框架,其适用范围不仅限于服务器端开发,绝大多数Java应用均可从中受益。

WebStorm

WebStorm

WebStorm 是jetbrains公司旗下一款JavaScript 开发工具。目前已经被广大中国JS开发者誉为“Web前端开发神器”、“最强大的HTML5编辑器”、“最智能的JavaScript IDE”等。与IntelliJ IDEA同源,继承了IntelliJ IDEA强大的JS部分的功能。

用户登录
用户注册