K8S调度下的ingress-controller集群的实现以及nginx配置

22、K8S调度下的ingress-controller集群的实现以及nginx配置

目标: 1. 实现ingress-controller的集群部署

实现方法: 1. 为ingress-controller 规划两个节点

2.将这两个节点 打上自定义的 label

3.修改yaml文件,并重新创建 ingress-control

  1. 进入k8s主节点ingress yaml文件目录

Cd /data/developercenter_kubernetes/ingress

查看节点的label

kubectl get nodes --show-labels

2.为规划的ingress-controller节点打上标签

语法格式: kubectl label nodes <node-name> <label-key>=<label-value>

示例:

kubectl label nodes k8s-master beta.kubernetes.node=ingress.control

kubectl label nodes ip beta.kubernetes.node=ingress.control

3.删除ingress-controller

kubectl delete -f with-rbac.yaml

4.修改配置文件 编辑 /data/developercenter_kubernetes/ingress/with-rbac.yaml 文件(修改前先备份该文件)

本文件共修改两处:

第一处:  修改pod数量为2

将 replicas: 1 修改成 replicas: 2

第二处: 将ingress-controller 部署到规划中的节点(即刚才打标签的节点)

nodeSelector:

beta.kubernetes.node: ingress.control

4.创建 ingress-controller

kubectl create -f with-rbac.yaml

5.基础镜像拷贝的ingress-controller规划节点(k8s服务相关基础镜像均没有上传到docker仓库,因此需要手工拷贝并导入到ingress规划节点)

k8s 主节点执行:

docker save -o nginx-ingress-controller.tar cloud-kubernetes/nginx-ingress-controller:0.11.0

ingress 规划节点执行:

docker load -i nginx-ingress-controller.tar

6.验证

命令: kubectl get pod -n ingress-nginx

如图即为成功,可以看到ingress-controller分步在两个节点上:

kubectl get pod -n ingress-nginx

kubectl describe pod nginx-ingress-controller-6ffb549676-qtct2 -n ingress-nginx |grep IP

7.查看k8s中应用的域名

方法一:select app_id,app_name from yonyou_cloud.app_manage;(直接从数据库中查询部署的应用对应生成的ID)

方法二:

l 查看ingress-controller的pod名

kubectl get pod -n ingress-nginx

l 查看ingress-controller中的nginx配置,确认应用名格式(k8s为应用生成的域名固定格式为:应用ID + 固定后缀)

kubectl exec -it nginx-ingress-controller-6ffb549676-5pq4m -n ingress-nginx grep server_name /etc/nginx/nginx.conf

l 确认应用的真实域名

353版本

进入开发者中心(http://主节点ip:80),查看应用生成的真实域名,

如下图中可以看到,域名为 bxgd7iw7.c87e2267-1001-4c70-bb2a-ab41f3b81aa3.app.uap.com

对比上一条命令,可以知道 mmm 应用,对应在k8s中的域名为 bxgd7iw7.prod1.cloud-k8s.com

此域名也即为在nginx中使用的域名

8.nginx的配置

配置文件,请参考附件22、K8S调度下的ingress-controller集群的实现以及nginx配置


root@dc-yunwei-ansible conf.d\]# cat aa.conf upstream aa.pool { ip_hash; server ip1; # 这里写两台ingress-controller节点的ip地址 server ip2; } server { listen 80; server_name aa.k8.com; #这里下客户自定义的域名, access_log /usr/local/nginx/logs/aa.com_access.log; location / { // root /; proxy_redirect off ; proxy_set_header X-Forwarded-Host $http_host; proxy_set_header X-Forwarded-For $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_connect_timeout 300; // proxy_headers_hash_max_size 512; proxy_send_timeout 300; proxy_read_timeout 600; // proxy_buffer_size 64k; proxy_buffers 4 64k; proxy_busy_buffers_size 64k; proxy_temp_file_write_size 64k; proxy_next_upstream error timeout invalid_header http_500 http_503 http_404; proxy_max_temp_file_size 128m; proxy_set_header Host "jquukbal.prod1.cloud-k8s.com"; #这里写k8s为应用生成的域名 set $proxy_upstream_name "jquukbal.prod1.cloud-k8s.com"; #这里写k8s为应用生成的域名 proxy_pass http://aa.pool/; #这里写上面配置的upstream proxy_ignore_client_abort on; proxy_headers_hash_max_size 51200; proxy_headers_hash_bucket_size 6400; } } ----------------------------------------------------------------

相关推荐
悟纤8 小时前
Docker 操作容器[SpringBoot之Docker实战系列] - 第538篇
spring boot·docker·容器
苹果醋39 小时前
AI大模型竞赛升温:百度发布文心大模型4.5和X1
java·运维·spring boot·mysql·nginx
伊成11 小时前
详解docker挂载目录常用方式
docker·容器·eureka
风清再凯11 小时前
docker镜像的构建image
运维·docker·容器
风清再凯11 小时前
docker 网络
网络·docker·容器
饭碗、碗碗香11 小时前
【开发常用命令】:docker常用命令
linux·运维·笔记·学习·docker·容器
天外来物12 小时前
实战分享:用CI/CD实现持续部署
前端·nginx·docker
郝同学的测开笔记13 小时前
一次业务投诉引发的思考:如何优雅地将K8s服务暴露给外部?
后端·kubernetes
可观测性用观测云13 小时前
Ingress-nginx 接入可观测性最佳实践
nginx