首页 > 系统相关 >在Kubernetes环境中有关Nginx Ingress与API Gateway的连接问题

在Kubernetes环境中有关Nginx Ingress与API Gateway的连接问题

时间:2023-10-03 10:04:23浏览次数:40  
标签:Ingress set Kubernetes nginx header ingress Nginx proxy apigw



文章目录

  • 小结
  • 问题
  • 解决
  • 参考


小结

在Kubernetes环境中是通过Nginx Ingress来从外部访问Kubernetes内部的环境,并用API Gateway来分发请求,碰到了 502 Bad gateway.的问题,并尝试解决。

问题

从外部通过Nginx Ingress访问Kubernetes内部的环境API Gateway,返回错误: 502 Bad gateway. 这里API Gateway也起到了Load Balancer的作用。

[john@Node1 ~]$ curl -H 'Host:apigw.com' http://192.168.18.16:80/Test Application/process
<html>
<head><title>502 Bad Gateway</title></head>
<body>
<center><h1>502 Bad Gateway</h1></center>
<hr><center>nginx/1.25.1</center>
</body>
</html>

查看Nginx运行的实例:

[john@Master ~]$ kubectl get pods -o wide -A | tail -n 2
nginx-ingress    nginx-ingress-c46vc                      1/1     Running   0          31d     10.244.3.163     Node1   <none>           <none>
nginx-ingress    nginx-ingress-hvqjg                      1/1     Running   0          31d     10.244.4.164     Node2   <none>           <none>

查看错误日志,

[john@Master ~]$ kubectl logs -f nginx-ingress-hvqjg -n nginx-ingress

可以看到类似以下错误:connect() failed (111: Connection refused) while connecting to upstream

查看Nginx的配置文件:

[john@Master ~]$ kubectl exec -it nginx-ingress-c46vc -n nginx-ingress -- /bin/bash
nginx@nginx-ingress-hvqjg:/$ cat /etc/nginx/nginx.conf
nginx@nginx-ingress-hvqjg:/$ cat /etc/nginx/conf.d/default-apigw-ingress.conf

解决

通常情况下需要去查找后台服务的问题,有可能是后台服务没有正常启动所导致的连接问题。

确认了后台服务没有问题后,那么需要去看Nginx Ingress的配置问题。
以下是正确Ngnix Ingress配置示例 (在Nginx Ingress的pod中):

nginx@nginx-ingress-hvqjg:/$ cat /etc/nginx/conf.d/default-apigw-ingress.conf
# configuration for default/apigw-ingress

upstream default-apigw-ingress-apigw.com-apigw-service-80 {
	zone default-apigw-ingress-apigw.com-apigw-service-80 256k;
	random two least_conn;
	
	server 10.244.3.169:8090 max_fails=1 fail_timeout=10s max_conns=0;
	server 10.244.4.171:8090 max_fails=1 fail_timeout=10s max_conns=0;
	
}
server {
	
	listen 80;

	server_tokens on;

	server_name apigw.com;

	set $resource_type "ingress";
	set $resource_name "apigw-ingress";
	set $resource_namespace "default";

	
	location / {
		set $service "apigw-service";
		
		proxy_http_version 1.1;

		proxy_connect_timeout 60s;
		proxy_read_timeout 60s;
		proxy_send_timeout 60s;
		client_max_body_size 1m;
		proxy_set_header Host $host;
		proxy_set_header X-Real-IP $remote_addr;
		proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
		proxy_set_header X-Forwarded-Host $host;
		proxy_set_header X-Forwarded-Port $server_port;
		proxy_set_header X-Forwarded-Proto $scheme;
		proxy_buffering on;
		
		proxy_pass http://default-apigw-ingress-apigw.com-apigw-service-80/;
		
	}
	location /eureka {
		set $service "eureka-lb";
		
		proxy_http_version 1.1;
		
		proxy_connect_timeout 60s;
		proxy_read_timeout 60s;
		proxy_send_timeout 60s;
		client_max_body_size 1m;
		proxy_set_header Host $host;
		proxy_set_header X-Real-IP $remote_addr;
		proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
		proxy_set_header X-Forwarded-Host $host;
		proxy_set_header X-Forwarded-Port $server_port;
		proxy_set_header X-Forwarded-Proto $scheme;
		proxy_buffering on;
		
		
		proxy_pass http://default-apigw-ingress-apigw.com-eureka-lb-80/;
		
		
	}
	
	
}

参考

Stackoverflow: 502 Bad gateway when trying to connect to backendNginx Ingress Installation with Manifestsserver fault: connect() failed (111: Connection refused) while connecting to upstreamstackoverflow: Why does attempting to connect to my ingress show connection refused?

nginx报错:connect() failed (111: Connection refused) while connecting to upstream

Nginx报502错误,日志connect() failed (111: Connection refused) while connecting to upstream的个人有效解决方案

Kubernetes Ingress

标签:Ingress,set,Kubernetes,nginx,header,ingress,Nginx,proxy,apigw
From: https://blog.51cto.com/u_11949423/7689636

相关文章

  • 01. Kubernetes基础入门
    目录1、前言2、Kubernetes介绍2.1、什么是Kubernetes2.2、主要功能2.3、与Docker的关系2.4、Kubernetes集群架构体系3、Kubernetes组件3.1、核心组件3.2、附加组件4、Kubernetes对象4.1、对象管理4.2、命名空间4.3、标签1、前言Docker容器技术将应用及其依赖打包到镜像中,从而很好......
  • Nginx简介与Docker Compose部署指南
    Nginx是一款高性能的开源Web服务器和反向代-理服务器,以其卓越的性能、可伸缩性和灵活性而闻名。它在全球范围内广泛用于托管Web应用程序、负载均衡、反向代-理和更多场景中。在本文中,我们将首先介绍Nginx的基本概念,然后演示如何使用DockerCompose轻松部署Nginx服务器。什么是Nginx......
  • nginx跨域
    add_header'Access-Control-Allow-Origin'*;#允许带上cookie请求add_header'Access-Control-Allow-Credentials''true';#允许请求的方法,比如GET/POST/PUT/DELETEadd_header'Access-Control-Allow-Methods'*;#允许请求的headeradd_hea......
  • 【Nginx23】Nginx学习:响应头与Map变量操作
    Nginx学习:响应头与Map变量操作响应头是非常重要的内容,浏览器或者客户端有很多东西可能都是根据响应头来进行判断操作的,比如说最典型的Content-Type,之前我们也演示过,直接设置一个空的types然后指定默认的数据类型的值,所有的请求浏览器都会直接下载。另外,我们现在在做前后分离的......
  • nginx配置kibana访问用户名和密码认证、及无认证访问配置
    转载请注明出处:在nginx上配置kibana页面访问时,默认是采用kibana的认证,一般直接安装kibana后,是没有用户名和密码认证的。如果要在负载均衡上配置反向代理和用户认证,可按以下步骤进行配置:1.安装Nginx:首先,确保已经安装了Nginx,并且可以正常访问Kibana页面。2.生......
  • Nginx syslog 日志系统
    做ELK目录,其中Logstash需要远程获取其他服务器上的日志,采用nginxsyslog进行传输。以下是对syslog参数的说明server=address        定义syslog服务器地址。该地址可以指定为带有可选端口的域名或IP地址,也可以指定为unix:前缀后面指定的unix域套接字路径。如......
  • 运维 | Nginx Proxy Manager反向代理工具
    运维|NginxProxyManager反向代理工具简介NginxProxyManager(以下简称NPM)就是一个Nginx的代理管理器,它最大的特点是简单方便。即使是没有Nginx基础的小伙伴,也能轻松地用它来完成反向代理的操作,不需要自己写复杂的nginx配置,而且因为自带面板,操作极其简单。NginxProxy......
  • Kubernetes 无法join:[ERROR CRI]: container runtime is not running:
    Kubernetes初始化成功,然后将node加入,结果报错:[root@k8s-node1~]#kubeadmjoin10.10.10.185:6443--token84pas2.ifxb6o8g7h2abg28--discovery-token-ca-cert-hashsha256:f85f0c324e0b951238617f9037832b63e4c4a6c7679aaa53c711a829fc9374e6[preflight]Runningpre-flight......
  • 高可用Kubernetes集群实战(二)
    安装containerd容器运行时[root@k8sm1~]#yuminstall-ycontainerd.io-1.6.6生成containerd配置文件创建配置文件存储目录[root@k8sm1~]#mkdir-p/etc/containerd生成配置文件[root@k8sm1~]#containerdconfigdefault>/etc/containerd/config.toml修改配置文件修改san......
  • 高可用Kubernetes集群实战(三)
    安装nginx安装依赖[root@k8sm1~]#yuminstall-yepel-release安装nginxkeepalived[root@k8sm1~]#yuminstall-ynginxkeepalivednginx-mod-stream配置nginx[root@k8sm1~]#cat/etc/nginx/nginx.conf#Formoreinformationonconfiguration,see:#*OfficialE......