一、场景
K8S中nginx ingress一般负载的是pod的service,但如何代理到一个外部服务A?
二、前提
K8S的docker中可以访问外部服务A,即网络上是打通的,可以事先测试确认好;
三、解决方案
1> 通过ingress yaml语法代理,简单的反向代理是可以的,但涉及附加参数的调整的话,
该方案不适用;
---
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: yourdomain
namespace: yournamespace
spec:
rules:
- host: yourdomain.cnd.com
http:
paths:
- path: /
backend:
serviceName: yourdomain
servicePort: 18306
- path: /yourown
backend:
serviceName: yourdomain-cnd
servicePort: 8888
注意:
1> 此处servicename的写法上,仅支持,英文字母开头和结束的,可以有连字符【-】,其他字符不支持,比如子域名中的dot【.】,因此此写法不能直接路由到外部域名的服务A
2> 如果要附加调整一些请求header参数,比如:host,此写法不好支持,暂没有发现;
2> 通过ingress 使用snippet注入类原生代码;
nginx-ingress中可以使用以下snippet annotion,
一个成功使用configuration的snippet,如下:
---
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: yourfromdomain
namespace: your-custom-namespace
annotations:
nginx.ingress.kubernetes.io/configuration-snippet: |
if ($request_uri ~ "^\/backendbac|\/backenddef|\/backendxyz") {
more_set_input_headers "Host: youregateway.cnd.com";
proxy_pass http://youregateway.cnd.com:8888;
break;
}
spec:
rules:
- host: yourfromdomain.cnd.com
http:
paths:
- path: /
backend:
serviceName: yourfromdomain
servicePort: 18306
## more_set_headers "Host: youregateway.responsecnd.com";
注意:
1> 此处对原生的nginx proxy_set_header不适用,而要使用:more_set_input_headers来设置request header参数;
2> 另外,more_set_headers可以设置response中header参数;
另一个通过rewrite而不是反向代理实现的例子如下:
---
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: yourfromdomain
namespace: your-custom-namespace
annotations:
nginx.ingress.kubernetes.io/configuration-snippet: |
rewrite /yourbackendapi/(.*) /yoursecondapi/$1 break;
spec:
rules:
- host: yourfromdomain.cnd.com
http:
paths:
- path: /
backend:
serviceName: yourfromdomain
servicePort: 28206
四、同步循环模式【synchronization loop pattern】
Avoiding outage from wrong configuration
Because the ingress controller works using the synchronization loop pattern, it is applying the configuration for all matching objects. In case some Ingress objects have a broken configuration, for example a syntax error in the nginx.ingress.kubernetes.io/configuration-snippet annotation, the generated configuration becomes invalid, does not reload and hence no more ingresses will be taken into account.
这就是为什么ingress yaml文件中annotation的注解部分代码,有语法错误时,其配置不会同步到nginx.conf,而是采用旧文件,遵循既有规则优先的原则。
五、参考官方
https://kubernetes.github.io/ingress-nginx/user-guide/nginx-configuration/annotations/#custom-nginx-upstream-vhost
https://kubernetes.github.io/ingress-nginx/how-it-works/
分享到:
相关推荐
k8s-修改ingress-nginx-controller中nginx配置文件参数参考
部署 Ingress-nginx controller 在 k8s 新版本中的实现 Kubernetes(简称 k8s)是 Google 开发的开源容器编排系统,Ingress 是 k8s 中的一种 API 对象,用于管理集群中服务的外部访问。Ingress 可以提供负载均衡、...
里面包含:deploy.yaml 和 ingress-nginx....ingress-nginx.tar是k8s的nginx镜像 将两个文件放到任意文件夹下,在文件夹下依次运行命令: docker load -i ingress-nginx.tar kubectl apply -f deploy.yaml 即可安装成功
ingress-nginx部署文件,用于k8s部署ingress-nginx服务
ingress-nginx-4.0.17是专为Helm部署在Kubernetes(k8s)集群中的ingress-nginx控制器设计的图表资源。这个版本提供了稳定性和性能优化,使得对Kubernetes服务的外部访问变得更为便捷和可靠。本文将深入探讨ingress...
1.14.0 ingress-nginx配置选项
kubernetes 中的 pod 中容器想要对外部用户...端口的方式访问,而在 ingress 当中可以使用七层协议(HTTP/HTTPS)的服务方式来实现负载均衡以及 k8s 集群内部服务和客户端之间的通信(既可以通过域名和主机名的方式)
ingress-nginx.tar离线安装包,适用k8s版本 1.25.x~1.28.x
在Kubernetes(k8s)集群中,Ingress是一个核心组件,用于定义外部网络如何访问集群内部的服务。Ingress YAML文件是配置Ingress规则的文本文件,它使用YAML语法来描述HTTP和HTTPS路由规则,以便将外部请求定向到正确...
k8s.gcr.io-ingress-nginx-controller-v0.43.0.tar
7. **Ingress**:Ingress是k8s中的外部网络访问控制器,它允许外部流量通过HTTP/HTTPS协议访问内部服务。配置Ingress规则,可以将特定的域名或路径映射到Nacos的Service,从而实现外网访问。 8. **Ingress ...
在 Kubernetes 集群中,ingress-nginx-controller 是一种常用的网络路由控制器,它基于 Nginx 实现,用于处理来自外部的入站流量,将请求转发到相应的后端服务。本文将深入探讨 ingress-nginx-controller 的核心概念...
nginx-ingress镜像
`nginx-pv.yaml` 文件通常用于定义 Persistent Volume(PV),这是k8s中的一个持久化存储资源,用于为有状态应用如Nginx提供持久化数据存储。在Nginx作为反向代理或静态文件服务器时,可能需要持久化存储其配置文件...
Nginx模块开发OpenResty简单使用笔记整理 ### Nginx简介 Nginx是当前最流行的HTTP Server之一,根据W3Techs的统计,目前世界排名(根据Alexa)前100万的网站中。与Apache相比。 同时,大量的第三方扩展模块也令...
kubernetes的quay.io/kubernetes-ingress-controller/nginx-ingress-controller:0.20.0镜像包,版本为v0.20.0。文件先解压,之后得到nginx-ingress-controller.0.20.0.tar
在实际操作中,部署 ingress-nginx 控制器时,你需要确保集群已经安装了 Kubernetes Ingress API,并正确配置了 NodePort 或 LoadBalancer 类型的 Service,以便外部能够访问。修改好 "ingress-nginx-controller-1.9...
在k8s中,Ingress控制器可以配置为四层负载均衡器,根据目标服务的IP和端口将流量分发到后端服务。例如,你可以创建一个Ingress规则,将所有到达特定端口的流量转发到指定的Service。 三、七层负载均衡 七层负载...
quay.io/kubernetes-ingress-controller/nginx-ingress-controller:0.30.0
k8s.gcr.io-ingress-nginx-controller-v0.41.2.tar