k8s部署nginx自动更新域名及解除后端依赖

这篇具有很好参考价值的文章主要介绍了k8s部署nginx自动更新域名及解除后端依赖。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

问题

在k8s中使用nginx作为后端接口反向代理,大概配置如下:

  location /api {
      proxy_set_header   X-Forwarded-Proto $scheme;
      proxy_set_header   Host              $http_host;
      proxy_set_header   X-Real-IP         $remote_addr;
      proxy_pass http://api-server-svc:8080/;
  }

其中api-server-svc是后端服务的service
这个配置会有两个问题:

  1. 要求api-server-svc这个service要先创建,否则nginx启动时会因为无法解析api-server-svc而启动失败
  2. nginx服役期间,如果后端服务重启,svc ip改变了,代理会失败,因为nginx缓存了旧ip

解决

修改nginx配置如下:

  # dns设置缓存时间5s,解决问题2
  resolver kube-dns.kube-system.svc.cluster.local valid=5s;
  # 使用变量方式,解决问题1
  set $apiserver api-server-svc.xxx.svc.cluster.local;

  location /api {
      proxy_set_header   X-Forwarded-Proto $scheme;
      proxy_set_header   Host              $http_host;
      proxy_set_header   X-Real-IP         $remote_addr;
      rewrite /api/(.*) /$1 break;
      proxy_pass http://$apiserver:8080;
  }

上述配置文件看起来简单,实际踩了很多坑才研究出来:

坑1

set $apiserver api-server-svc.xxx.svc.cluster.local; 中域名一定要写全域名,不能简写成api-server-svc
之前之所以可以简写,因为容器/etc/resolv.conf中有配置了search,在解析域名时会自动帮你补全域名。
但此处我们使用了resolver指定了域名服务器,在解析时是不会自动帮我们补全的

坑2

使用了proxy_pass http://$apiserver:8080;后,反向代理时url会丢失造成访问404,例如你的请求地址是

http://xxxx/api/a/b/c

代理后只剩下http://xxxx/,所以一定要使用 rewrite /api/(.*) /$1 break;文章来源地址https://www.toymoban.com/news/detail-444605.html

到了这里,关于k8s部署nginx自动更新域名及解除后端依赖的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • k8s:基础内容和部署简单nginx

    1) apiVersion v1:Kubernetes API的稳定版本,包含很多核心对象:pod、service等。 2) kind kind指定这个资源对象的类型,如pod、deployment、statefulset、job、cronjob、Endpoints service Endpoints :可以把外部的链接到k8s系统中 service:部署一个内部的IP,其他deployment可以链接 deployment:部署一个pod

    2023年04月20日
    浏览(27)
  • k8s中部署nginx-ingress实现外部访问k8s集群内部服务

    k8s通过nginx-ingress实现集群外网访问功能 1.1 ingress 工作原理 step1:ingress contronler通过与k8s的api进行交互,动态的去感知k8s集群中ingress服务规则的变化,然后读取它,并按照定义的ingress规则,转发到k8s集群中对应的service。 step2:而这个ingress规则写明了哪个域名对应k8s集群中的

    2024年02月07日
    浏览(32)
  • k8s 部署 Nginx 并代理到tomcat

    [root@master nginx]# kubectl get nodes -o wide   [root@master nginx]# kubectl get svc NAME            TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)          AGE kubernetes      ClusterIP   10.96.0.1       none        443/TCP          25h tomcatservice   NodePort    10.102.227.68   none        8080:30010/TCP  

    2024年01月22日
    浏览(26)
  • Kubeadm 部署k8s实现并且演示滚动不停服务更新

    在开始之前,部署Kubernetes集群机器需要满足以下几个条件: 一台或多台机器,操作系统 CentOS7.x-86_x64; 硬件配置:2GB或更多RAM,2个CPU或更多CPU,硬盘30GB或更多; 集群中所有机器之间网络互通; 可以访问外网,需要拉取镜像; 禁止swap分区。 主机详情 IP Hostname 备注 192.168

    2024年02月11日
    浏览(27)
  • 持续集成部署-k8s-配置与存储-配置管理:ConfigMap 的热更新

    在 Kubernetes 中, ConfigMap 是用于存储非敏感配置数据的 API 对象,它可以被挂载到 Pod 中作为文件或环境变量。 ConfigMap 的热更新指的是在不重启 Pod 的情况下,动态更新 Pod 中使用的配置数据。 首先创建一个 configMap: 配置文件如下: private-image-pull-pod.yaml

    2024年02月05日
    浏览(31)
  • K8s部署Prometheus+grafana+alertmanager报警监控系统(持续更新)

    自行准备一套k8s集群,如果不知道怎么搭建,可以参考一下我之前的博客 https://blog.csdn.net/qq_46902467/article/details/126660847 我的k8s集群地址是: k8s-master1 10.0.0.10 k8s-node1 10.0.0.11 k8s-node2 10.0.0.12 一、安装nfs服务 二、安装nfs客户端 三、部署Prometheus 四、部署grafana 五、部署alertmanage

    2023年04月24日
    浏览(40)
  • K8S(1.28)--部署ingress-nginx(1.9.1)

    原文网址:K8S(1.28)--部署ingress-nginx(1.9.1)-CSDN博客 本文介绍K8S部署ingress-nginx的方法。 本文使用的K8S和ingress-nginx都是最新的版本。 官网地址 https://kubernetes.github.io/ingress-nginx/deploy/ Ingress里Nginx的代理流程: 1.确定版本 首先确定版本:https://github.com/kubernetes/ingress-nginx 我K8S是1.2

    2024年02月20日
    浏览(32)
  • k8s之ingress-nginx-controller与metallb部署

    在Kubernetes中,服务和Pod的IP地址仅可以在集群网络内部使用,对于集群外的应用是不可见的。为了使外部的应用能够访问集群内的服务,Kubernetes 目前提供了以下几种方案: NodePort LoadBalancer Ingress 为了解决外部访问k8s内服务及负载均衡问题,这里介绍如何安装ingress-nginx-cont

    2023年04月08日
    浏览(29)
  • k8s实战案例之部署Nginx+Tomcat+NFS实现动静分离

    根据业务的不同,我们可以导入官方基础镜像,在官方基础镜像的基础上自定义需要用的工具和环境,然后构建成自定义出自定义基础镜像,后续再基于自定义基础镜像,来构建不同服务的基础镜像,最后基于服务的自定义基础镜像构建出对应业务镜像;最后将这些镜像上传

    2024年02月07日
    浏览(36)
  • 深入了解Kubernetes(k8s):安装、使用和Java部署指南(持续更新中)

    Docker和Kubernetes是两个不同的概念和技术,它们在容器化应用和容器编排方面有着不同的功能和作用。 Docker: Docker是一个开源的容器化平台,用于构建、打包和运行应用程序。通过使用Docker,你可以将应用程序及其依赖项打包到一个独立的轻量级容器中,使其可以在不同的环

    2024年02月10日
    浏览(31)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包