git clone https://github.com/replay/ngx_http_consistent_hash.git
git clone https://github.com/replay/ngx_http_consistent_hash.git
这时候,如再在这台宿主机上启动另一个Docker容器,如nginx-2: $ docker run –d --name nginx-2 nginx $ brctl show bridge name bridge 这时候,若你在nginx-1容器ping一下nginx-2容器的IP地址(172.17.0.3),就会发现同一宿主机上的两个容器默认相互连通。 要通过二层网络到达nginx-2容器,就要有172.17.0.3 IP地址对应的MAC地址。 这端口正是nginx-2容器“插”在docker0网桥的另一块虚拟网卡,也是个Veth Pair设备。这样,数据包就进入了nginx-2容器的Network Namespace。 所以,nginx-2容器看到它自己的eth0网卡出现了流入的数据包。这样,nginx-2的网络协议栈就会对请求进行处理,最后将响应(Pong)返回到nginx-1。
---------------# vim ingress-nginx-2.yaml apiVersion: apps/v1 kind: Deployment metadata: name: nginx -2 spec: selector: matchLabels: name: nginx-2 replicas: 2 template: metadata: labels: name: nginx-2 spec: containers: - name: nginx-2 image: docker.io nginx-svc-2 spec: ports: - port: 80 targetPort: 80 protocol: TCP selector: name: nginx
2、部署多个服务 现在我们再跑一个nginx服务 docker run -d --name nginx-2 -p 8082:80 于是网络路线图就变成这样了: 3、统一入口 如果按照之前那种方式,一个服务一个端口映射到宿主机上 ; location /nginx-1/ { proxy_pass http://nginx-1; } location /nginx -2/ { proxy_pass http://nginx-2; } } } 启动下: docker run -d --name nginx-proxy 访问第一个服务路径:**http://your-server-ip/nginx-1/** 访问第二个服务路径:**http://your-server-ip/nginx-2/** 到此,就算入门了。
run –d --name nginx-2 nginx ? 当我们在容器nginx-1内去ping一下nginx-2的ip,默认下是通的 ? image 1.宿主机内的两个主机通过二层网络相通,nginx-1会先发一个ARP包来获取nginx-2的MAC地址 2.nginx-1只能看到他自己network namespace内的网卡 nginx nginx-2了 6.同样数据包先根据Veth Pair设备到达宿主机namespace内的网卡,然后交给docker-0进行转发,由于此时docker-0网桥已经学习到了nginx-2的mac地址对应的端口了 ,只需要查CAM表查一下记录,转发到另外一块宿主机的虚拟网卡,然后到达nginx-2的namespace内的网卡 以上就是同一个宿主机内的不同docker容器通过Veth Pair设备和docker-0
metadata: name: deploy-nginx-2 spec: replicas: 2 template: metadata: labels: name: nginx -2 spec: containers: - name: nginx-2 image: escape/nginx:v2 imagePullPolicy 80 --- apiVersion: apps/v1 kind: Service metadata: name: svc-nginx-2 spec: selector: name: nginx
: nginx-1 hostname: www1.netkiller.cn image: nginx:latest ports: - 81:80 restart: always nginx -2: container_name: nginx-2 hostname: www2.netkiller.cn image: nginx:latest ports: - 82:80
创建一个名为nginx-2的Pod,并为它分配一个唯一的标识符:nginx-2.nginx-headless.default.svc.cluster.local。
192.168.100.114: keepalived-backup 192.168.100.202: VIP 192.168.100.117: nginx-1 192.168.100.118: nginx keepalived实现虚拟IP(VIP),client访问VIP,连接到keepalived-master,keepliaved-master服务器通过LVS轮询机制将请求负载到nginx-1和nginx
增加容忍度参数,进行测试 cat > nginx-daemonset-2.yaml << EOF apiVersion: apps/v1 kind: DaemonSet metadata: name: nginx -2 namespace: default labels: web: nginx-2 spec: selector: matchLabels: web: nginx -2 template: metadata: labels: web: nginx-2 spec: containers: - name : nginx-2 image: nginx:1.17 ports: - containerPort: 80 tolerations:
: nginx-1 hostname: www1.netkiller.cn image: nginx:latest ports: - 81:80 restart: always nginx -2: container_name: nginx-2 hostname: www2.netkiller.cn image: nginx:latest ports: - 82:80
如前面创建pod的label是app=nginx-2,如果在运行过程中,需要把其label改为app=nginx-3,这patch命令如下: [root@Master1 ~]# kubectl patch rc-nginx.yaml replicationcontroller "rc-nginx-3" deleted [root@Master1 ~]# kubectl delete pod -lapp=nginx
: app-nginx image: #repository: 192.168.200.11/library/nginx repository: 192.168.200.11/library/nginx
这时候,如果我们再在这台宿主机上启动另一个 Docker 容器,比如 nginx-2 $ docker run –d --name nginx-2 nginx $ brctl show bridge name 这时候,如果你在 nginx-1 容器里 ping 一下 nginx-2 容器的 IP 地址(172.17.0.3),就会发现同一宿主机上的两个容器默认就是相互连通的。
2)业务Pod(Pod Client)再直接发起往该IP地址的请求,请求最终经过Nginx服务(Service Nginx)转发到达后端的Nginx容器(Pod Nginx-1和Pod Nginx-2)
root@ydt-net-nginx-cisp:/root #docker tag 11.8.36.21:8443/library/nginx:1.19 11.8.36.21:8443/library/nginx -2:1.19 #推送镜像 root@ydt-net-nginx-cisp:/root #docker push 11.8.36.21:8443/library/nginx-2:1.19 The push refers to a repository [11.8.36.21:8443/library/nginx-2] f0f30197ccf9: Pushed eeb14ff930d4: Pushed
如前面创建pod的label是app=nginx-2,如果在运行过程中,需要把其label改为app=nginx-3,这patch命令如下: kubectl patch pod rc-nginx-2-kpiqt kubectl delete -f rc-nginx.yaml kubectl delete po rc-nginx-btv4j kubectl delete po -lapp=nginx-
network test demo python env.py $ docker service create --name nginx --replicas 3 --network test -p 80:80 nginx
nginx.yml nginx.yml文件信息 [root@k8s-master ~]# vim nginx.yml apiVersion: v1 kind: Pod metadata: name: nginx