欢迎来到飞鸟慕鱼博客,开始您的技术之旅!
当前位置: 首页知识笔记正文

cloud如何注册和发现服务的,服务注册与发现

墨初 知识笔记 35阅读

目录用于网络位置注册到服务发现模块,即容器本身的一些信息注册在consul中,其他程序可以通过consul获取注册的相关服务信息,这就是服务。

务注册与发现。

consul的部署 主机IP运行的服务consul服务器192.168.3.100运行consul服务、nginx服务、consul-template守护进程registrator服务器192.168.3.101运行registrator容器、运行nginx容器 1、环境准备
systemctl stop firewalld.service    #关闭防火墙setenforce 0        #关闭selinux
2、部署consul服务器 1建立 Consul 服务
mkdir /data/consul    #创建一个consul目录cp consul_0.9.2_linux_amd64.zip /data/consul    #将上传的consul压缩包复制过去cd /data/consul    unzip consul_0.9.2_linux_amd64.zip    #解压压缩包mv consul /usr/local/bin/    #将解压的文件移动到/usr/local/bin/目录下
2设置代理在后台启动 consul 服务端
consul agent \-server \-bootstrap \-ui \-data-dir/var/lib/consul-data \-bind192.168.3.100 \-client0.0.0.0 \-nodeconsul-server01 &> /var/log/consul.log &-server 以server身份启动。默认是client。-bootstrap 用来控制一个server是否在bootstrap模式在一个数据中心中只能有一个server处于bootstrap模式当一个server处于 bootstrap模式时可以自己选举为 server-leader。-bootstrap-expect2 集群要求的最少server数量当低于这个数量集群即失效。-ui 指定开启 UI 界面这样可以通过  这样的地址访问 consul 自带的 web UI 界面。-data-dir 指定数据存储目录。-bind 指定用来在集群内部的通讯地址集群内的所有节点到此地址都必须是可达的默认是0.0.0.0。-client 指定 consul 绑定在哪个 client 地址上这个地址提供 HTTP、DNS、RPC 等服务默认是 127.0.0.1。-node 节点在集群中的名称在一个集群中必须是唯一的默认是该节点的主机名。-datacenter 指定数据中心名称默认是dc1。
netstat -natp | grep consul启动consul后默认会监听5个端口8300replication、leader farwarding的端口8301lan cossip的端口8302wan gossip的端口8500web ui界面的端口8600使用dns协议查看节点信息的端口
3查看集群信息
#查看members状态consul members#查看集群状态consul operator raft list-peers
4通过 http api 获取集群信息
curl 127.0.0.1:8500/v1/status/peers #查看集群server成员curl 127.0.0.1:8500/v1/status/leader#集群 server-leadercurl 127.0.0.1:8500/v1/catalog/services#注册的所有服务curl 127.0.0.1:8500/v1/catalog/nginx#查看 nginx 服务信息curl 127.0.0.1:8500/v1/catalog/nodes#集群节点详细信息
3、registrator服务器部署 1安装 Gliderlabs/Registrator
docker run -d \--nameregistrator \--nethost \-v /var/run/docker.sock:/tmp/docker.sock \--restartalways \gliderlabs/registrator:latest \--ip192.168.3.101 \consul://192.168.3.100:8500--nethost 把运行的docker容器设定为host网络模式。-v /var/run/docker.sock:/tmp/docker.sock 把宿主机的Docker守护进程(Docker daemon)默认监听的Unix域套接字挂载到容器中。--restartalways 设置在容器退出时总是重启容器。--ip 刚才把network指定了host模式所以我们指定ip为宿主机的ip。consul 指定consul服务器的IP和端口。
2测试服务发现功能是否正常
docker run -itd -p:83:80 --name test-01 -h test01 nginxdocker run -itd -p:84:80 --name test-02 -h test02 nginxdocker run -itd -p:88:80 --name test-03 -h test03 httpddocker run -itd -p:89:80 --name test-04 -h test04 httpd
3验证 http 和 nginx 服务是否注册到 consul
浏览器中输入  Web 页面中“单击 NODES”然后单击“consurl-server01”会出现 5 个服务。
4在consul服务器使用curl测试连接服务器
curl 127.0.0.1:8500/v1/catalog/services 
4、consul-template的部署

Consul-Template是基于Consul的自动替换配置文件的应用。Consul-Template是一个守护进程用于实时查询Consul集群信息并更新文件系统上任意数量的指定模板生成配置文件。更新完成以后可以选择运行 shell 命令执行更新操作重新加载 Nginx。

Consul-Template可以查询Consul中的服务目录、Key、Key-values 等。这种强大的抽象功能和查询语言模板可以使 Consul-Template 特别适合动态的创建配置文件。例如创建Apache/Nginx Proxy Balancers 、 Haproxy Backends等。

1准备 template nginx 模板文件
//在consul服务器上操作vim /data/consul/nginx.ctmpl#定义nginx upstream一个简单模板upstream http_backend {  {{range service nginx}}   server {{.Address}}:{{.Port}};   {{end}}}server {    listen 8000;    server_name localhost 192.168.3.100;    access_log /var/log/nginx/kgc.com-access.log;#修改日志路径    index index.html index.php;    location / {        proxy_set_header HOST $host;        proxy_set_header X-Real-IP $remote_addr;        proxy_set_header Client-IP $remote_addr;        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;        proxy_pass     }}
2编译安装nginx
yum -y install pcre-devel zlib-devel gcc gcc-c makeuseradd -M -s /sbin/nologin nginxtar zxvf nginx-1.22.0.tar.gz -C /data/cd /data/nginx-1.22.0/./configure --prefix/usr/local/nginx --usernginx --groupnginx && make && make installln -s /usr/local/nginx/sbin/nginx /usr/local/sbin/
3配置 nginx
vim /usr/local/nginx/conf/nginx.conf......http {     include       mime.types;     include  vhost/*.conf;       #添加虚拟主机目录     default_type  application/octet-stream;......//创建虚拟主机目录mkdir /usr/local/nginx/conf/vhost//创建日志文件目录mkdir /var/log/nginx//启动nginxnginx
4配置并启动 template
unzip consul-template_0.19.3_linux_amd64.zip -d /data/cd /data/mv consul-template /usr/local/bin///在前台启动 template 服务启动后不要按 ctrlc 中止 consul-template 进程。consul-template --consul-addr 192.168.3.100:8500 \--template /data/consul/nginx.ctmpl:/usr/local/nginx/conf/vhost/heitui.conf:/usr/local/nginx/sbin/nginx -s reload \--log-levelinfo
vim /usr/local/nginx/conf/vhost/heitui.conf#下面是自动生成的配置文件内容upstream http_backend {   server 192.168.3.101:83;   server 192.168.3.101:84;}server {    listen 8000;    server_name localhost 192.168.3.100;    access_log /var/log/nginx/kgc.com-access.log;       #修改日志路径    index index.html index.php;    location / {        proxy_set_header HOST $host;        proxy_set_header X-Real-IP $remote_addr;        proxy_set_header Client-IP $remote_addr;        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;        proxy_pass     }}
5访问 template-nginx
docker ps -adocker exec -it c9cf7a3f9e25 bashecho this is test1 web > /usr/share/nginx/html/index.htmldocker exec -it 4ba02020f69f bashecho this is test2 web > /usr/share/nginx/html/index.html浏览器访问 并不断刷新。

不断刷新会轮流出现如下页面 

6增加一个 nginx 容器节点

docker run -itd -p:85:80 --name test-05 -h test05 nginx#查看/usr/local/nginx/conf/vhost/heitui.conf 文件内容cat /usr/local/nginx/conf/vhost/heitui.conf
#查看三台 nginx 容器日志请求正常轮询到各个容器节点上docker logs -f test-01docker logs -f test-02docker logs -f test-05
consul总结

1、consul  实现 服务自动发现和注册 的一种工具

2、consul 的模式

client模式可用于接收后端服务发来的注册信息并转发给server节点没有持久化能力server模式可用于接收后端服务/client模式的节点发来的注册信息还可在server节点之间同步注册信息具有持久化注册信息到本地的能力server-leader节点负责同步注册信息给其它的server节点并对各个节点做健康检查 Docker安全 1、尽量别做的事 尽量不用 --privileged 运行容器授权容器root用户用户宿主机的root权限尽量不用 --network host 运行容器使用host网络模式共享宿主机的网络命名空间尽量不在容器中运行 ssh 服务尽量不把宿主机系统的关键敏感挂载到容器中 2、尽量要做的事 尽量使用最小化的镜像尽量以单一进程运行容器尽量在容器中使用最新版本的应用尽量安装最新版本的docker尽量以最低权限运行容器尽量使用官方的镜像或自己构建镜像尽量给容器分配独立的文件系统尽量以资源限制的方式运行容器 -m   --cpu-quota   --cpuset-cpus   --device-write-bps尽量以只读的方式挂载数据卷持久化容器数据到宿主机时除外 -v 宿主机目录:容器目录:ro 尽量设置容器重启次数 --restart on-failure:N 3、DockerClient 端与 DockerDaemon 的通信安全

为了防止链路劫持、会话劫持等问题导致 Docker 通信时被中间人攻击c/s 两端应该通过 TLS 加密方式通讯即使用https安全的超文本传输协议

通过在服务端上创建tls密钥证书再下发给客户端客户端通过私钥访问容器这样就保证的docker通讯的安全性。

http     超文本传输协议                 tcp/80       明文传输
https    安全的超文本传输协议           tcp/443      密文传输    证书加密(ssl/tls加密)

使用证书访问的工作流程

1服务端会事先通过 CA 签发服务器端证书和私钥
2客户端发起 https 请求到服务端的 443 端口
3服务器会先返回一个包含公钥、证书有效期、CA机构等信息的证书给客户端
4客户端会先用本地CA的证书验证服务端证书的有效性如果证书有效则会在客户端随机生成一个会话密钥并通过服务端发来的公钥加密后再发给服务端
5服务端会用私钥解密获取客户端发来的会话密钥之后双方即可通过会话密码加密/解密来实现密文通信

4、使用OpenSSL创建自签名证书的步骤 1创建CA私钥和证书
openssl genrsa -out ca.key 2048                                  #创建 CA 私钥文件openssl req -new -x509 -days 3650 -key ca.key -out ca.pem        #创建 CA 证书文件genrsa使用RSA算法产生私钥-out输出文件的路径若未指定输出文件则为标准输出2048指定私钥长度默认为1024。该项必须为命令行的最后一项参数req执行证书签发命令-new新证书签发请求-x509生成x509格式证书专用于创建私有CA时使用-days证书的有效时长,单位是天-key指定私钥路径-sha256证书摘要采用sha256算法-subj证书相关的用户信息(subject的缩写)-out输出文件的路径
2创建服务端证书自签名请求文件
openssl genrsa -out server.key 2048                     #创建服务端私钥文件openssl req -new -key server.key -out server.csr        #创建服务端证书自签名请求文件
3基于 CA私钥、证书 和 服务端证书自签名请求文件 签发服务端证书
openssl x509 -req -days 3650 -in server.csr -CA ca.pem -CAkey ca.key -CAcreateserial -out server.pem      #创建服务端证书文件

yum -y install gcc pcre-devel openssl-devel zlib-devel openssl  openssl-devel

#使用https需要安装的依赖环境

./configure --prefix/usr/local/nginx --usernginx --groupnginx --with-http_ssl_module --with-http_v2_module --with-http_realip_module --with-http_stub_status_module --with-http_gzip_static_module --with-pcre --with-stream --with-stream_ssl_module --with-stream_realip_module

#这是我编译安装的nginx命令

我们使用自签名证书可以实现通过https访问harbor私有仓库。

实现通过https访问harbor私有仓库仅需要在harbor的配置文件中如下图修改即可

标签:
声明:无特别说明,转载请标明本文来源!