首页 文章 精选 留言 我的

精选列表

搜索[电机控制],共10000篇文章
优秀的个人博客,低调大师

k8s RBAC 多租户权限控制实现

访问到权限分两部分 1.Authenticating认证授权配置由kube-apiserver管理 这里使用的是 Static Password File方式。apiserver启动yaml里配置basic-auth-file即可,容器 启动apiserver的话要注意这个文件需要是在容器内能访问到的。(可以通过挂载文件,或者在已经挂载的路径里增加配置文件)basic-auth-file文件格式见官方文档https://kubernetes.io/docs/admin/authentication/#static-password-file注意password在第一个,之前没注意被卡了很久。修改了文件以后需要重启apiserver才能生效。这里kubectldelete删除pod有问题,使用docker命令查看apiserver容器其实没有重启。解决方案是使用dockerkill杀掉容器。自动重启。 [root@tensorflow1 ~]# curl -u admin:admin "https://localhost:6443/api/v1/pods" -k { "kind": "Status", "apiVersion": "v1", "metadata": { }, "status": "Failure", "message": "pods is forbidden: User \"system:anonymous\" cannot list pods at the cluster scope", "reason": "Forbidden", "details": { "kind": "pods" }, "code": 403 } 这个就是没有通过认证的报错 2.Authorization授权 k8sRBAC授权规则https://kubernetes.io/docs/admin/authorization/rbac/ 简单来说就是 权限--角色--用户绑定需要配置两个文件一个是role/clusterRole,定义角色以及其权限一个是roleBinding/clusterRoleBinding,定义用户和角色的关系 { "kind": "Status", "apiVersion": "v1", "metadata": { }, "status": "Failure", "message": "pods is forbidden: User \"admin\" cannot list pods at the cluster scope", "reason": "Forbidden", "details": { "kind": "pods" }, "code": 403 } 这个就是没有权限访问,需要配置RBAC 文件如下:方案1:role + roleBinding kind: Role apiVersion: rbac.authorization.k8s.io/v1 metadata: namespace: user1 name: pod-reader rules: - apiGroups: [""] # "" indicates the core API group resources: ["pods"] verbs: ["*"] - apiGroups: [""] # "" indicates the core API group resources: ["namespaces"] verbs: ["*"] kind: RoleBinding apiVersion: rbac.authorization.k8s.io/v1 metadata: name: user1-rolebinding namespace: user1 subjects: - kind: User name: user1 # Name is case sensitive apiGroup: rbac.authorization.k8s.io roleRef: kind: ClusterRole name: myauth-user apiGroup: rbac.authorization.k8s.io 方案2:clusterRole + roleBinding (推荐) clusterRole定义全局权限,roleBinding将权限限制到namespace。clusterRole仅需要定义一次。 kind: ClusterRole apiVersion: rbac.authorization.k8s.io/v1 metadata: name: myauth-user rules: - apiGroups: [""] # "" indicates the core API group resources: ["pods"] verbs: ["*"] - apiGroups: [""] # "" indicates the core API group resources: ["namespaces"] verbs: ["*"] - apiGroups: [""] # "" indicates the core API group resources: ["resourcequotas"] verbs: ["*"] kind: RoleBinding apiVersion: rbac.authorization.k8s.io/v1 metadata: name: user2-rolebinding namespace: user2 subjects: - kind: User name: user2 # Name is case sensitive apiGroup: rbac.authorization.k8s.io roleRef: kind: ClusterRole name: myauth-user apiGroup: rbac.authorization.k8s.io kind: RoleBinding apiVersion: rbac.authorization.k8s.io/v1 metadata: name: user1-rolebinding namespace: user1 subjects: - kind: User name: user1 # Name is case sensitive apiGroup: rbac.authorization.k8s.io roleRef: kind: ClusterRole name: myauth-user apiGroup: rbac.authorization.k8s.io 3.配置 新建静态密码文件 # vi /etc/kubernetes/pki/basic_auth_file admin,admin,1004 jane2,jane,1005 user1,user1,1006 user2,user2,1007 修改apiserver配置修改/etc/kubernetes/manifests/kube-apiserver.yaml在一堆参数配置下面增加 --basic-auth-file=/etc/kubernetes/pki/basic_auth_file eg: - --etcd-servers=https://127.0.0.1:2379 - --etcd-cafile=/etc/kubernetes/pki/etcd/ca.crt - --etcd-certfile=/etc/kubernetes/pki/apiserver-etcd-client.crt - --etcd-keyfile=/etc/kubernetes/pki/apiserver-etcd-client.key - --basic-auth-file=/etc/kubernetes/pki/basic_auth_file 这里将静态文件放在/etc/kubernetes/pki/目录下的原因是,apiserver通过容器启动,这个路径已经挂载容器中了,可以被访问到。放在其他路径需要额外配置挂载路径。apiserver只会启动在master节点上,故仅需要在master节点上配置即可。 启动好以后在master机器上执行kubectlgetall,多半是执行不成功的,因为修改apiserver配置文件后,apiserver自动重启,然后启动失败,所以就无法访问集群了。使用dockerps查看发现k8s_kube-scheduler和k8s_kube-controller-manager重启了,但是apiserver没起来。执行systemctlrestartkubelet,再dockerps就能看到apiserver启动成功了。如果还没启动起来,那再看看上面哪里配置有问题。 应用 使用--username={username}--password={password}参数访问kubectl 参考https://kubernetes-v1-4.github.io/docs/user-guide/kubectl/kubectl_create/ kubectl get all -n user1 --username=user1 --password=user1 kubectl create -f tf1-rc.yaml --username=user1 --password=user1 使用 curl -u {username}:{password} `js"https://{masterIP}:6443/api/v1/" -k访问httprestfulapicurl -u jane:jane2 "https://localhost:6443/api/v1/namespaces/user1/pods" -kcurl -u jane:jane2 "https://localhost:6443/api/v1/namespaces/user1" -k curl -u user1:user1 "https://localhost:6443/api/v1/namespaces/user1" -kcurl -u user1:user1 "https://localhost:6443/api/v1/namespaces/user1/pods" -kcurl -u user1:user1 "https://localhost:6443/api/v1/namespaces/user1/resourcequotas/" -k curl -u user2:user2 "https://localhost:6443/api/v1/namespaces/user2" -kcurl -u user2:user2 "https://localhost:6443/api/v1/namespaces/user2/pods" -kcurl -u user2:user2 "https://localhost:6443/api/v1/namespaces/user2/resourcequotas/" -k

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

ECS控制台标签操作的N种姿势

背景 弹性计算云服务器、磁盘、安全组、镜像、密钥对、网卡支持标签。 限制 随实例一起创建的资源,在创建的时候tag是会作用到实例及其创建的磁盘及网卡上的。 变更Tag时,只作用单资源,比如实例就实例,磁盘就磁盘,网卡就网卡。 操作 实例 标记资源标签、取消标记、修改标签 方式一:方式二:方式三: 通过标签过滤资源 方式一:。方式二: 磁盘 标记资源标签、取消标记、修改标签 方式一:方式二: 通过标签过滤资源 方式一: 镜像 标记资源标签、取消标记、修改标签 方式一:方式二: 通过标签过滤资源 方式一: 快照 标记资源标签、取消标记、修改标签 方式一:方式二: 通过标签过滤资源 方式一: 安全组 标记资源标签、取消标记、修改标签 方式一:点击修改方式二:方式三: 通过标签过滤资源 方式一: 网卡 标记资源标签、取消标记、修改标签 方式一: 点击修改 通过标签过滤资源 方式一: 密钥对 标记资源标签、取消标

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

容器Docker学习系列二~权限控制与命令了解

在原先的文章中我们进行了简单的容器的拉取,获取现在的运行的docker列表docker ps,查看下载的docker信息docker images。等等信息 。具体我们可以参考文章docker的使用学习接下来我们具体运行到ubuntu环境下进行查看。使用我们的docker ubuntu环境 我们的docker是部署在ubuntu18.04版本上的具体系统安装教程就不说了。 系统安装好之后会先进行sudo apt-get update进行包内信息 更新,如果出现锁的信息 锁信息 执行如下命令将锁信息解除 sudo rm /var/lib/apt/lists/lock sudo rm /var/cache/apt/archives/lock 然后在执行我们的 sudo apt-get update即可。 安装docker 因为docker默认使用的源是官方的hub源,暂时不修改下载源. 1. 使用命令sudo apt-get install docker.io 进行安装 2. 安装好之后使用sudo docker -v 查看版本号,形式如下。 但是这个安装好之后我们可以发现 使用sudo 可以使用 docker命令 ,但是我们使用普通用户的时候就没法使用了,那应该怎么办呢?我们可以把权限发送给我们的普通用户组,操作步骤如下 首先查看docker用户组是否存在 sudo cat /etc/group | grep docker 2.如果不存在那么就需要重新建立docker组,存在就不要考虑该步骤 。 sudo groupadd -g 999 docker // 其中 -g 999 是设置组id当然 我们也可以不进行设置。 将普通用户啊加入到该组当中 sudo usermod -aG docker docker //后面这个docker是我的用户名 在这里改成你的用户名即可 查看效果 使用命令查看效果,并且进行重启docker ,然后直接使用docker命令查看是否修改成功。docker info 或者docker images等 指令都可以。 cat /etc/group | grep docker //这个是过滤的docker用户组 内容跟上面的图 比 已经加上的我自己的用户 权限 最终普通用户也有操作权限去执行docker。 命令操作 总体来说Docker的命令总体不是很多。总体可以分为六类。那么我们进行6类操作。 1.本地镜像操作 images docker images 列出本地所下载的镜像。这是我们常用的操作命令。 语法: docker images [OPTIONS] [REPOSITORY[:TAG]] 其中我们看到的OPTIONS是可选的。个人一般没有具体使用过参数,不过如果镜像太多的情况,建议还是使用参数为好。 •a :列出本地所有的镜像(含中间映像层,默认情况下,过滤掉中间映像层); •digests :显示镜像的摘要信息; •f :显示满足条件的镜像; •format :指定返回值的模板文件; •no-trunc :显示完整的镜像信息; •q :只显示镜像ID。 这是我们已经从网络上下载好的docker镜像。TAG表示我们所用的版本,其中最新版本使用latest来表示。 如果我们需要查看具体docker的镜像 可以使用命令 例如: docker images redis 这是查看redis的本地镜像 原文发布时间为:2018-08-14 本文作者:琪琪 本文来自云栖社区合作伙伴“LuckQI”,了解相关信息可以关注“LuckQI”。

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

Openstack 实战讲解之-----------03-控制节点服务配置

设置时间同步: 对于openstack来说,时间同步非常重要,所以一定要保证所有服务的时间一直,下面对世界做同步: 1 2 3 4 timedatectllist-timezones| grep Shanghai查看时区 timedatectl set -timezoneAsia /Shanghai 设置时区 timedatectl set - local -rtc yes 把boolean替换成 yes 则表示使用本地时间,替换成no则表示是UTC时间 ntpdatetime1.aliyun.com同步时间 启动数据库服务 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 [root@linux-node1~] #systemctlenablemariadb.service设置开机自启动 Created symlink from /etc/systemd/system/multi-user .target.wants /mariadb .serviceto /usr/lib/systemd/system/mariadb .service. [root@linux-node1~] #systemctlstartmariadb.service启动数据库 [root@linux-node1~] #mysql_secure_installation初始化并设置密码 NOTE:RUNNINGALLPARTSOFTHISSCRIPTISRECOMMENDEDFORALLMariaDB SERVERSINPRODUCTIONUSE!PLEASEREADEACHSTEPCAREFULLY! InordertologintoMariaDBtosecureit,we'llneedthecurrent password for therootuser.Ifyou'vejustinstalledMariaDB,and youhaven't set therootpasswordyet,thepasswordwillbeblank, soyoushouldjustpressenterhere. Entercurrentpassword for root(enter for none): OK,successfullyusedpassword,movingon... SettingtherootpasswordensuresthatnobodycanlogintotheMariaDB rootuserwithouttheproperauthorisation. Setrootpassword?[Y /n ]y Newpassword: Re-enternewpassword: Passwordupdatedsuccessfully! Reloadingprivilegetables.. ...Success! Bydefault,aMariaDBinstallationhasananonymoususer,allowinganyone tologintoMariaDBwithouthavingtohaveauseraccountcreated for them.Thisisintendedonly for testing,andto make theinstallation goabitsmoother.Youshouldremovethembeforemovingintoa productionenvironment. Removeanonymous users ?[Y /n ]y ...Success! Normally,rootshouldonlybeallowedtoconnectfrom 'localhost' .This ensuresthatsomeonecannotguessattherootpasswordfromthenetwork. Disallowrootloginremotely?[Y /n ]y ...Success! Bydefault,MariaDBcomeswithadatabasenamed 'test' thatanyonecan access.Thisisalsointendedonly for testing,andshouldberemoved beforemovingintoaproductionenvironment. Remove test databaseandaccesstoit?[Y /n ]y -Dropping test database... ...Success! -Removingprivilegeson test database... ...Success! Reloadingtheprivilegetableswillensurethatallchangesmadesofar willtakeeffectimmediately. Reloadprivilegetablesnow?[Y /n ]y ...Success! Cleaningup... All done !Ifyou'vecompletedalloftheabovesteps,yourMariaDB installationshouldnowbesecure. Thanks for usingMariaDB! 配置rabbitMQ消息队列 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 [root@linux-node1~] #systemctlenablerabbitmq-server.service#设置开机启动 Created symlink from /etc/systemd/system/multi-user .target.wants /rabbitmq-server .serviceto /usr/lib/systemd/system/rabbitmq-server .service. [root@linux-node1~] #systemctlstartrabbitmq-server.service#启动消息队列 [root@linux-node1~] #rabbitmqctladd_useropenstackopenstack#给消息队列增加openstack用户和密码 Creatinguser "openstack" ... [root@linux-node1~] #rabbitmqctlset_permissionsopenstack".*"".*"".*"#给openstack设置消息队列的权限 Settingpermissions for user "openstack" in vhost "/" ... [root@linux-node1~] #rabbitmq-pluginslist#查看消息队列插件 Configured:E=explicitlyenabled;e=implicitlyenabled |Status:*=runningonrabbit@linux-node1 |/ []amqp_client3.6.5 []cowboy1.0.3 []cowlib1.0.1 []mochiweb2.13.1 []rabbitmq_amqp1_03.6.5 []rabbitmq_auth_backend_ldap3.6.5 []rabbitmq_auth_mechanism_ssl3.6.5 []rabbitmq_consistent_hash_exchange3.6.5 []rabbitmq_event_exchange3.6.5 []rabbitmq_federation3.6.5 []rabbitmq_federation_management3.6.5 []rabbitmq_jms_topic_exchange3.6.5 []rabbitmq_management3.6.5 []rabbitmq_management_agent3.6.5 []rabbitmq_management_visualiser3.6.5 []rabbitmq_mqtt3.6.5 []rabbitmq_recent_history_exchange1.2.1 []rabbitmq_sharding0.1.0 []rabbitmq_shovel3.6.5 []rabbitmq_shovel_management3.6.5 []rabbitmq_stomp3.6.5 []rabbitmq_top3.6.5 []rabbitmq_tracing3.6.5 []rabbitmq_trust_store3.6.5 []rabbitmq_web_dispatch3.6.5 []rabbitmq_web_stomp3.6.5 []rabbitmq_web_stomp_examples3.6.5 []sockjs0.3.4 []webmachine1.10.3 [root@linux-node1~] #rabbitmq-pluginsenablerabbitmq_management#加载消息队列的管理插件 Thefollowingpluginshavebeenenabled: mochiweb webmachine rabbitmq_web_dispatch amqp_client rabbitmq_management_agent rabbitmq_management Applyingpluginconfigurationtorabbit@linux-node1...started6plugins. [root@linux-node1~] #systemctlrestartrabbitmq-server.service#重启消息队列服务 消息队列服务验证 1 2 3 4 [root@linux-node1~] #lsof-i:15672 COMMANDPIDUSERFDTYPEDEVICESIZE /OFF NODENAME beam.smp6370rabbitmq53uIPv4373570t0TCP*:15672(LISTEN) 在浏览器中输入:192.168.56.11:15672,使用guest账号和guest密码登录 keystone认证服务 Keystone在N版已经是V3版本。在Keystone中主要涉及以下几个概念: User:使用服务的用户,可以是人,服务或者系统,只要是使用了openstack服务的对象都可以称为用户 project(tenant)租户,可以理解为一个人,项目或者组织拥有的资源的合集。在一个租户中可以拥有很多个用户,这些用户可以根据权限的划分使用租户中的资源 Role:角色,用于分配操作的权限。角色可以被指定给用户,使得该用户获得角色对应的操作权限 Token:认证成功后,keystone会生成一串比特值或者字符串,用来作为访问资源的令牌,token中有可访问资源的范围和有效时间 Keystone V3 API 新特性 Keystone V3 做出了许多变化和改进,我们选取其中较为重要的进行阐述: 将 Tenant 改称为 Project 引入 Domain 的概念 引入 Group 的概念 将 Tenant 改为 Project 并在其上添加 Domain 的概念,这更加符合现实世界和云服务的映射。 V3 利用 Domain 实现真正的多租户(multi-tenancy)架构,Domain 担任 Project 的高层容器。云服务的客户是 Domain 的所有者,他们可以在自己的 Domain 中创建多个 Projects、Users、Groups 和 Roles。通过引入 Domain,云服务客户可以对其拥有的多个 Project 进行统一管理,而不必再向过去那样对每一个 Project 进行单独管理。 Group 是一组 Users 的容器,可以向 Group 中添加用户,并直接给 Group 分配角色,那么在这个 Group 中的所有用户就都拥有了 Group 所拥有的角色权限。通过引入 Group 的概念,Keystone V3 实现了对用户组的管理,达到了同时管理一组用户权限的目的。这与 V2 中直接向 User/Project 指定 Role 不同,使得对云服务进行管理更加便捷。 图 . Domain、Group、Project、User 和 Role 的关系图(引用网上) 创建库及用户 在数据库中创建库和用户(这里为了方便会把后面用到cinder,glance ,neutron,等服务的账号一并创建到数据库中 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 CREATEDATABASEkeystone; GRANTALLPRIVILEGESONkeystone.*TO 'keystone' @ 'localhost' IDENTIFIEDBY 'keystone' ; GRANTALLPRIVILEGESONkeystone.*TO 'keystone' @ '%' IDENTIFIEDBY 'keystone' ; CREATEDATABASEglance; GRANTALLPRIVILEGESONglance.*TO 'glance' @ 'localhost' IDENTIFIEDBY 'glance' ; GRANTALLPRIVILEGESONglance.*TO 'glance' @ '%' IDENTIFIEDBY 'glance' ; CREATEDATABASEnova; GRANTALLPRIVILEGESONnova.*TO 'nova' @ 'localhost' IDENTIFIEDBY 'nova' ; GRANTALLPRIVILEGESONnova.*TO 'nova' @ '%' IDENTIFIEDBY 'nova' ; CREATEDATABASEnova_api; GRANTALLPRIVILEGESONnova_api.*TO 'nova' @ 'localhost' IDENTIFIEDBY 'nova' ; GRANTALLPRIVILEGESONnova_api.*TO 'nova' @ '%' IDENTIFIEDBY 'nova' ; CREATEDATABASEneutron; GRANTALLPRIVILEGESONneutron.*TO 'neutron' @ 'localhost' IDENTIFIEDBY 'neutron' ; GRANTALLPRIVILEGESONneutron.*TO 'neutron' @ '%' IDENTIFIEDBY 'neutron' ; CREATEDATABASEcinder; GRANTALLPRIVILEGESONcinder.*TO 'cinder' @ 'localhost' IDENTIFIEDBY 'cinder' ; GRANTALLPRIVILEGESONcinder.*TO 'cinder' @ '%' IDENTIFIEDBY 'cinder' ; 执行过程: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 [root@linux-node1~] #mysql-uroot-p Enterpassword: #用初始化时候设置的密码 MariaDB[(none)]>GRANTALLPRIVILEGESONkeystone.*TO 'keystone' @ '%' IDENTIFIEDBY 'keystone' ; QueryOK,0rowsaffected(0.00sec) MariaDB[(none)]>CREATEDATABASEglance; QueryOK,1rowaffected(0.00sec) MariaDB[(none)]>GRANTALLPRIVILEGESONglance.*TO 'glance' @ 'localhost' IDENTIFIEDBY 'glance' ; QueryOK,0rowsaffected(0.00sec) MariaDB[(none)]>GRANTALLPRIVILEGESONglance.*TO 'glance' @ '%' IDENTIFIEDBY 'glance' ; QueryOK,0rowsaffected(0.00sec) MariaDB[(none)]>CREATEDATABASEnova; QueryOK,1rowaffected(0.00sec) MariaDB[(none)]>GRANTALLPRIVILEGESONnova.*TO 'nova' @ 'localhost' IDENTIFIEDBY 'nova' ; QueryOK,0rowsaffected(0.00sec) MariaDB[(none)]>GRANTALLPRIVILEGESONnova.*TO 'nova' @ '%' IDENTIFIEDBY 'nova' ; QueryOK,0rowsaffected(0.00sec) MariaDB[(none)]>CREATEDATABASEnova_api; QueryOK,1rowaffected(0.00sec) MariaDB[(none)]>GRANTALLPRIVILEGESONnova_api.*TO 'nova' @ 'localhost' IDENTIFIEDBY 'nova' ; QueryOK,0rowsaffected(0.00sec) MariaDB[(none)]>GRANTALLPRIVILEGESONnova_api.*TO 'nova' @ '%' IDENTIFIEDBY 'nova' ; QueryOK,0rowsaffected(0.00sec) MariaDB[(none)]>CREATEDATABASEneutron; QueryOK,1rowaffected(0.00sec) MariaDB[(none)]>GRANTALLPRIVILEGESONneutron.*TO 'neutron' @ 'localhost' IDENTIFIEDBY 'neutron' ; QueryOK,0rowsaffected(0.00sec) MariaDB[(none)]>GRANTALLPRIVILEGESONneutron.*TO 'neutron' @ '%' IDENTIFIEDBY 'neutron' ; QueryOK,0rowsaffected(0.00sec) MariaDB[(none)]>CREATEDATABASEcinder; QueryOK,1rowaffected(0.00sec) MariaDB[(none)]>GRANTALLPRIVILEGESONcinder.*TO 'cinder' @ 'localhost' IDENTIFIEDBY 'cinder' ; QueryOK,0rowsaffected(0.00sec) MariaDB[(none)]>GRANTALLPRIVILEGESONcinder.*TO 'cinder' @ '%' IDENTIFIEDBY 'cinder' ; QueryOK,0rowsaffected(0.00sec) MariaDB[(none)]>showdatabases; +--------------------+ |Database| +--------------------+ |cinder| |glance| |information_schema| |keystone| |mysql| |neutron| |nova| |nova_api| |performance_schema| +--------------------+ 9rows in set (0.00sec) keystone配置文件 1 2 3 4 5 [root@linux-node1~] #grep-n'^[a-z]'/etc/keystone/keystone.conf 640:connection=mysql+pymysql: //keystone :keystone@192.168.56.11 /keystone 1472:servers=192.168.56.11:11211 #memcache服务地址 2655:provider=fernet #配置令牌 2665:driver=memcache #选择driver为memcache默认是sql 初始化数据库,memcache配置 1 su -s /bin/sh -c "keystone-managedb_sync" keystone 验证初始化是否成功: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 [root@linux-node1~] #mysql-h192.168.56.11-ukeystone-pkeystone-e"usekeystone;showtables;" +------------------------+ |Tables_in_keystone| +------------------------+ |access_token| |assignment| |config_register| |consumer| |credential| |endpoint| |endpoint_group| |federated_user| |federation_protocol| |group| |id_mapping| |identity_provider| |idp_remote_ids| |implied_role| |local_user| |mapping| |migrate_version| |nonlocal_user| |password| |policy| |policy_association| |project| |project_endpoint| |project_endpoint_group| |region| |request_token| |revocation_event| |role| |sensitive_config| |service| |service_provider| |token| |trust| |trust_role| |user| |user_group_membership| |whitelisted_config| +------------------------+ 安装memcached 1 2 3 4 5 6 7 8 yuminstallmemcachedpython-memcached vim /etc/sysconfig/memcached [root@linux-node1~] #cat/etc/sysconfig/memcached PORT= "11211" USER= "memcached" MAXCONN= "1024" CACHESIZE= "64" OPTIONS= "-l192.168.56.11,::1" 通过keystone-manage生成token认证必要的信息: 1 2 3 4 5 6 7 [root@linux-node1keystone] #keystone-managefernet_setup--keystone-userkeystone--keystone-groupkeystone [root@linux-node1keystone] #keystone-managecredential_setup--keystone-userkeystone--keystone-groupkeystone [root@linux-node1keystone] #keystone-managebootstrap--bootstrap-passwordadmin\ >--bootstrap-admin-urlhttp: //192 .168.56.11:35357 /v3/ \ >--bootstrap-internal-urlhttp: //192 .168.56.11:35357 /v3/ \ >--bootstrap-public-urlhttp: //192 .168.56.11:5000 /v3/ \ >--bootstrap-region- id RegionOne 配置apache服务 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 [root@linux-node1keystone] #vim/etc/httpd/conf/httpd.conf#编辑配置文件, 95ServerName192.168.56.11:80 配置软连接 [root@linux-node1keystone] #ln-s/usr/share/keystone/wsgi-keystone.conf/etc/httpd/conf.d/ 启动服务: [root@linux-node1keystone] #systemctlenablehttpd.service Created symlink from /etc/systemd/system/multi-user .target.wants /httpd .serviceto /usr/lib/systemd/system/httpd .service. [root@linux-node1keystone] #systemctlstarthttpd.service [root@linux-node1keystone] # [root@linux-node1keystone] #lsof-i:80 COMMANDPIDUSERFDTYPEDEVICESIZE /OFF NODENAME httpd22891root4uIPv6591570t0TCP*:http(LISTEN) httpd22902apache4uIPv6591570t0TCP*:http(LISTEN) httpd22906apache4uIPv6591570t0TCP*:http(LISTEN) httpd22907apache4uIPv6591570t0TCP*:http(LISTEN) httpd22908apache4uIPv6591570t0TCP*:http(LISTEN) httpd22909apache4uIPv6591570t0TCP*:http(LISTEN) 配置环境变量: export OS_USERNAME=admin export OS_PASSWORD=admin export OS_PROJECT_NAME=admin export OS_USER_DOMAIN_NAME=Default export OS_PROJECT_DOMAIN_NAME=Default export OS_AUTH_URL=http: //192 .168.56.11:35357 /v3 export OS_IDENTITY_API_VERSION=3 安装openstack客户端,如果不安装是没有openstack命令的 yum install -ypython-openstackclient 安装完毕执行以下命令验证: [root@linux-node1keystone] #openstackuserlist#查看用户列表 +----------------------------------+-------+ |ID|Name| +----------------------------------+-------+ |b84c1614b79b40278e02bd6ed034cc6f|admin| +----------------------------------+-------+ [root@linux-node1keystone] #openstackrolelist#查看权限列表 +----------------------------------+-------+ |ID|Name| +----------------------------------+-------+ |9b0ba78cf70048efa8659220a3cebd06|admin| +----------------------------------+-------+ [root@linux-node1keystone] #openstackprojectlist#查看项目列表 +----------------------------------+-------+ |ID|Name| +----------------------------------+-------+ |7ae0fb7deb5342d885a07c2c890a1ff4|admin| +----------------------------------+-------+ [root@linux-node1keystone] #openstackendpointlist#查看端点列表 +---------------+-----------+--------------+--------------+---------+-----------+------------------+ |ID|Region|ServiceName|ServiceType|Enabled|Interface|URL| +---------------+-----------+--------------+--------------+---------+-----------+------------------+ |65f66a71d4624|RegionOne|keystone|identity|True|internal|http: //192 .168.5| |2a0a80a0de1b6||||||6.11:35357 /v3/ | |503929||||||| |71f801be8bc54|RegionOne|keystone|identity|True|admin|http: //192 .168.5| |7aca380c81b79||||||6.11:35357 /v3/ | |6b240a||||||| |b1caff56f31f4|RegionOne|keystone|identity|True|public|http: //192 .168.5| |dfabe5a8418c6||||||6.11:5000 /v3/ | |5e2839||||||| +---------------+-----------+--------------+--------------+---------+-----------+------------------+ 创建项目: 1 2 3 4 5 6 7 8 9 10 11 12 [root@linux-node1keystone] #openstackprojectcreate--domaindefault--description"ServiceProject"service +-------------+----------------------------------+ |Field|Value| +-------------+----------------------------------+ |description|ServiceProject| |domain_id|default| |enabled|True| | id |7f240473406147b99463f32b876bf69d| |is_domain|False| |name|service| |parent_id|default| +-------------+----------------------------------+ 这里生成的结果除了id和我不一样,其他的差不多一样 查看是否创建成功 1 2 3 4 5 6 7 [root@linux-node1keystone] #openstackprojectlist +----------------------------------+---------+ |ID|Name| +----------------------------------+---------+ |7ae0fb7deb5342d885a07c2c890a1ff4|admin| |7f240473406147b99463f32b876bf69d|service| +----------------------------------+---------+ 创建demo项目: 1 2 3 4 5 6 7 8 9 10 11 12 [root@linux-node1keystone] #openstackprojectcreate--domaindefault--description"DemoProject"demo +-------------+----------------------------------+ |Field|Value| +-------------+----------------------------------+ |description|DemoProject| |domain_id|default| |enabled|True| | id |9b913d25891849baa55b21d837e9b63d| |is_domain|False| |name|demo| |parent_id|default| +-------------+----------------------------------+ 验证是否创建成功: 1 2 3 4 5 6 7 8 [root@linux-node1keystone] #openstackprojectlist +----------------------------------+---------+ |ID|Name| +----------------------------------+---------+ |7ae0fb7deb5342d885a07c2c890a1ff4|admin| |7f240473406147b99463f32b876bf69d|service| |9b913d25891849baa55b21d837e9b63d|demo| +----------------------------------+---------+ 创建用户 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 [root@linux-node1keystone] #openstackusercreate--domaindefault--password-promptdemo UserPassword: RepeatUserPassword: +---------------------+----------------------------------+ |Field|Value| +---------------------+----------------------------------+ |domain_id|default| |enabled|True| | id |f0c69bad72b54e0daef92c2295425932| |name|demo| |password_expires_at|None| +---------------------+----------------------------------+ [root@linux-node1keystone] #openstackuserlist +----------------------------------+-------+ |ID|Name| +----------------------------------+-------+ |b84c1614b79b40278e02bd6ed034cc6f|admin| |f0c69bad72b54e0daef92c2295425932|demo| +----------------------------------+-------+ 创建role权限: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 [root@linux-node1keystone] #openstackrolecreateuser +-----------+----------------------------------+ |Field|Value| +-----------+----------------------------------+ |domain_id|None| | id |f53267146a6449b797393f7fc5d23e10| |name|user| +-----------+----------------------------------+ [root@linux-node1keystone] #openstackrolelist +----------------------------------+-------+ |ID|Name| +----------------------------------+-------+ |9b0ba78cf70048efa8659220a3cebd06|admin| |f53267146a6449b797393f7fc5d23e10|user| +----------------------------------+-------+ 把用户添加到项目中,并赋予权限 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 [root@linux-node1keystone] #openstackroleadd--projectdemo--userdemouser#把demo用户加到demo项目中并赋予user权限 这里我把以后各个服务用户赋予不同role规则: [root@linux-node1keystone] #openstackusercreate--domaindefault--password-promptglance UserPassword: RepeatUserPassword: +---------------------+----------------------------------+ |Field|Value| +---------------------+----------------------------------+ |domain_id|default| |enabled|True| | id |8dc6f28207b64e6d845a444a2ba18205| |name|glance| |password_expires_at|None| +---------------------+----------------------------------+ [root@linux-node1keystone] #openstackroleadd--projectservice--userglanceadmin [root@linux-node1keystone] #openstackusercreate--domaindefault--password-promptnova UserPassword: RepeatUserPassword: +---------------------+----------------------------------+ |Field|Value| +---------------------+----------------------------------+ |domain_id|default| |enabled|True| | id |db596da4ed8f47ab9dc7fa77d3bc8c6c| |name|nova| |password_expires_at|None| +---------------------+----------------------------------+ [root@linux-node1keystone] #openstackroleadd--projectservice--usernovaadmin [root@linux-node1keystone] #openstackusercreate--domaindefault--password-promptneutron UserPassword: RepeatUserPassword: +---------------------+----------------------------------+ |Field|Value| +---------------------+----------------------------------+ |domain_id|default| |enabled|True| | id |c0f9c52898ad4d4f88254a01c458eb27| |name|neutron| |password_expires_at|None| +---------------------+----------------------------------+ [root@linux-node1keystone] #openstackroleadd--projectservice--userneutronadmin [root@linux-node1keystone] #openstackusercreate--domaindefault--password-promptcinder UserPassword: RepeatUserPassword: +---------------------+----------------------------------+ |Field|Value| +---------------------+----------------------------------+ |domain_id|default| |enabled|True| | id |e5dbdde24a7340edb8bd3f498f9d28b5| |name|cinder| |password_expires_at|None| +---------------------+----------------------------------+ [root@linux-node1keystone] #openstackroleadd--projectservice--usercinderadmin 验证keystone 验证用户: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 unset OS_AUTH_URLOS_PASSWORD取消之前的环境变量 [root@linux-node1keystone] #openstack\ >--os-auth-urlhttp: //192 .168.56.11:35357 /v3 \ >--os-project-domain-namedefault\ >--os-user-domain-namedefault\ >--os-project-nameadmin\ >--os-usernameadmintokenissue Password: #输入密码后能出现下面内容说明用户没有问题 +------------+---------------------------------------------------------------------------------------+ |Field|Value| +------------+---------------------------------------------------------------------------------------+ |expires|2016-12-2811:05:46+00:00| | id |gAAAAABYY456xFHiZSMnQ7x88FxUJjuu3uO8xRLh_soTSgyf3KzMv0nY3s4wn1diFlJ7d2qjPub0iftlOKUnZ| ||z9QYPMUGhfxguZhEHWQtufNQNxZD9r8ekluU0XjCdrdnBU-fs3IM6EmJt3O1Sl-| ||Nw4G40uh0xatMkxI6bmrG3fRkCrcLga6Cx4| |project_id|7ae0fb7deb5342d885a07c2c890a1ff4| |user_id|b84c1614b79b40278e02bd6ed034cc6f| +------------+--------------------------------------------------------------------------------------- 创建环境变量脚本: 创建admin变量 1 2 3 4 5 6 7 8 9 [root@linux-node1~] #catadmin-openstack export OS_PROJECT_DOMAIN_NAME=default export OS_USER_DOMAIN_NAME=default export OS_PROJECT_NAME=admin export OS_USERNAME=admin export OS_PASSWORD=admin export OS_AUTH_URL=http: //192 .168.56.11:35357 /v3 export OS_IDENTITY_API_VERSION=3 export OS_IMAGE_API_VERSION=2 创建demo变量 1 2 3 4 5 6 7 8 9 [root@linux-node1~] #catdemo-openstack export OS_PROJECT_DOMAIN_NAME=default export OS_USER_DOMAIN_NAME=default export OS_PROJECT_NAME=demo export OS_USERNAME=demo export OS_PASSWORD=demo export OS_AUTH_URL=http: //192 .168.56.11:5000 /v3 export OS_IDENTITY_API_VERSION=3 export OS_IMAGE_API_VERSION=2 使环境变量生效: soure demo-openstack Keystone常见错误 1 2 3 4 5 6 401 #验证失败,keystone相关用户账户密码设置错误,时间不同步,或者输入的项目名称不对 403 #可能未初始化OS_token变量,需要使用source命令使其生效,也可能是配置的配置文件未生效,需要重启相关服务 409 #keystone创建用户,用户已存在 500 #服务器内部错误,服务配置有问题,看日志,检查配置 503 #keystone相关账户密码设置有问题,请将相关的glance账户删除,重新创建即可 服务故障 #相关服务没有起来 本文转自 kesungang 51CTO博客,原文链接:http://blog.51cto.com/sgk2011/1887008,如需转载请自行联系原作者

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

ubversion版本控制企业架构搭建之双机热备

1、前言 笔者公司需要一台svn服务器,但不幸的是公司给了一台破旧的服务器(本地用的,其他服务都跑在阿里云上),笔者担心没过多久服务器就挂点,故而想做svn的双机热备。 2、实践部分 2.1、环境 svnSer: ipaddress=10.168.0.176 hostname=svnSer svn-slaveSer: ipaddress=10.168.0.179 hostname=svn-slaveSer 2.2、svnSer安装配置(Master) In svnSer: 请参阅如下文章安装配置 http://cmdschool.blog.51cto.com/2420395/1715856 并增加如下配置 In svnSer: 1)定义svn备份管理员的用户名和密码 vim修改/var/local/svn/conf/passwd 增加如下定义: 1 bkuser = bkpwd 2)定义svn备份管理员的组、组成员和目录的组权限: vim修改/var/local/svn/conf/authz 1 2 3 4 5 [ groups ] admin_rw = bkuser [/] @admin_rw = rw 3)重启服务 1 /etc/init .d /svnserve restart 2.3、svn-slaveSer的安装配置(Slave) 2.3.1、step1 基本环境配置 In svn-slaveSer: 1)yum安装 1 yum -y install subversion 2)定义库文件夹 1 svnadmin create /var/local/svn 3)启动并设置服务开机启动 1 2 /etc/init .d /svnserve start chkconfig svnserve on 4)设置防火墙 vim编辑/etc/sysconfig/iptables 加入如下内容: 1 -A INPUT -m state --state NEW -m tcp -p tcp --dport 3690 -j ACCEPT 5)重启防火墙 1 /etc/init .d /iptables restart 2.3.2、step2 In svn-slaveSer: 1 2 3 4 cd /var/local/svn/hooks/ cp pre-revprop-change.tmpl pre-revprop-change chmod 744 pre-revprop-change ll pre-revprop-change vim编辑/var/local/svn/hooks/pre-revprop-change 修改最后一行 修改前: 1 exit 1 修改后: 1 exit 0 注:允许修改注释 2.3.3、step3 获取Master的配置文件 In svn-slaveSer: 1)复制配置文件 1 scp 10.168.0.176: /var/local/svn/conf/ * /var/local/svn/conf/ 2)重启服务 1 /etc/init .d /svnserve restart 2.3.4、step4 初始化同步信息 In svn-slaveSer 1 svnsync init file : ///var/local/svn/ svn: //10 .168.0.176 /var/local/svn 以上步骤会询问你svn的账号和密码,输入前面定义的用户名和密码: 用户名:bkuser 密码:bkpwd 2.3.5、step5 同步测试 In svn-slaveSer: 1 svnsync sync file : ///var/local/svn/ 以上步骤会询问你svn的账号和密码,输入前面定义的用户名和密码: 用户名:bkuser 密码:bkpwd 成功后的同步结果: 2.3.5、step5 设置用户提交自动同步 In svnSer: 1 2 3 4 cd /var/local/svn/hooks/ cp post-commit.tmpl post-commit chmod 700 post-commit ll post-commit vim编辑/var/local/svn/hooks/post-commit 末尾删除如下内容: 1 2 3 REPOS= "$1" REV= "$2" mailer.py commit "$REPOS" "$REV" /path/to/mailer .conf 增加如下内容: 1 svnsync sync --non-interactive svn: //10 .168.0.179 /var/local/svn --username bkuser --password bkpwd 以上语句建议先执行一次测试可用再写入post-commit 2.3.6、step6 检查同步情况: 1)桌面新建两个文件夹,pojectA与pojectB 2)分别做如下检出: 注意:以上检出的IP地址分别对应svnSer与svn-slaveSer 3)以上都单击【OK】后检出完毕,记录当前的版本号。 4)更新projetA文件夹的内容并做提交操作并记录提交后的版本号。 5)projetB做更新操作,并查看更新后的版本号是否是刚由projectA提交的版本号。 本文转自 tanzhenchao 51CTO博客,原文链接:http://blog.51cto.com/cmdschool/1716033,如需转载请自行联系原作者

资源下载

更多资源
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应用均可从中受益。

Rocky Linux

Rocky Linux

Rocky Linux(中文名:洛基)是由Gregory Kurtzer于2020年12月发起的企业级Linux发行版,作为CentOS稳定版停止维护后与RHEL(Red Hat Enterprise Linux)完全兼容的开源替代方案,由社区拥有并管理,支持x86_64、aarch64等架构。其通过重新编译RHEL源代码提供长期稳定性,采用模块化包装和SELinux安全架构,默认包含GNOME桌面环境及XFS文件系统,支持十年生命周期更新。

Sublime Text

Sublime Text

Sublime Text具有漂亮的用户界面和强大的功能,例如代码缩略图,Python的插件,代码段等。还可自定义键绑定,菜单和工具栏。Sublime Text 的主要功能包括:拼写检查,书签,完整的 Python API , Goto 功能,即时项目切换,多选择,多窗口等等。Sublime Text 是一个跨平台的编辑器,同时支持Windows、Linux、Mac OS X等操作系统。

用户登录
用户注册