我的目标是通过GCE入口过滤nginx提供服务的Kubernetes引擎上部署的angular应用程序的IP地址的访问。
但是在我的nginx上remote_addr不对。
$LB_IP是此处定义的IP:kubernetes。io/入口。全局静态ip名称:app angular
我在nginx上使用set_real_ip_from来设置X-Forwarded-For的ip
set_real_ip_from $LB_IP;
real_ip_header X-Forwarded-For;
原始ip在X-Forwarded-For标头中,正如google文档中预期的那样:https://cloud.google.com/compute/docs/load-balancing/http/#components
我可以看到X-Forwarded-For包含$CLIENT_IP,但远程地址不正确,顺便说一下,我的IP过滤器不工作。有什么想法吗?
我的nginx日志:
10.40.40.40---[07/Feb/2018:11:29:48 0000]“GET/styles.bundle.css HTTP/1.1“200 35908”http://MY_URL/home“Mozilla/5.0(Macintosh;英特尔Mac OS X 10_13_3)AppleWebKit/537.36(KHTML,类似Gecko)Chrome/64.0.3282.140 Safari/537.36”“$CLIENT_IP,$LB_IP”
但我想:
$CLIENT_IP--[07/Feb/2018:11:29:48 0000]"GET/styles.bundle.cssHTTP/1.1"200 35908"超文本传输协议://MY_URL/home""Mozilla/5.0(Macintosh; Intel Mac OS X10_13_3)AppleWebKit/537.36(KHTML, like Gecko)<--plhd--3/64.0.3282.140Safari /537.36"$CLIENT_IP,$LB_IP"
我的入口配置:
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: ingress
annotations:
kubernetes.io/ingress.global-static-ip-name: app-angular
spec:
rules:
- host: MY_URL
http:
paths:
- backend:
serviceName: app-backend
servicePort: 80
我的后端配置:
apiVersion: v1
kind: Service
metadata:
name: app-backend
spec:
type: NodePort
selector:
app: app-angular
ports:
- port: 80
targetPort: 80
我的部署配置:
apiVersion: apps/v1beta1
kind: Deployment
metadata:
name: app-angular
spec:
replicas: 2
revisionHistoryLimit: 2
template:
metadata:
labels:
app: app-angular
tier: frontend
spec:
containers:
- name: app-angular
image: gcr.io/MY_PROJECT/app-angular:MY_TAG
imagePullPolicy: Always
ports:
- containerPort: 80
我的nginx配置:
server {
listen 80;
root /usr/share/nginx/html;
location / {
set_real_ip_from $LB_IP;
real_ip_header X-Forwarded-For;
allow 130.211.0.0/22; #Google IP
allow $CLIENT_IP; # FILTERED IP
allow 10.0.0.0/8; #internal network
deny all;
index index.html index.htm;
try_files $uri $uri/ /index.html =404;
}
}
任何想法?
我们正在nginx-ingres
前面使用一个httpgclb-ingres
。为了让RealIP
正常工作,我添加了
kind: ConfigMap
apiVersion: v1
metadata:
name: ingress-nginx
labels:
k8s-addon: ingress-nginx.addons.k8s.io
data:
##
## Google Infra Blocks needed
## 130.211.0.0/22,35.191.0.0/16
##
## Google Cloud Load Balancer
## GCLB-IP/32
proxy-real-ip-cidr: 130.211.0.0/22,35.191.0.0/16,[YOUR-GCLB-IP]/32
这允许nginx
信任来自谷歌基础设施的X-Forwarded-For
。
您提供的链接专门针对GCP负载平衡器。对于NGNIX负载均衡器,您应该考虑将外部业务策略注解添加到NoDePoT服务中,以保持客户端IP。
我还发现了一个类似的问题,可追溯到2017年年中,这表明某些版本的nginx控制器存在问题,请确保您正在使用的映像没有此问题。
最后,您可能需要在配置ConfigMap中添加use-proxy-协议:true,因为您使用的入口充当使用代理的HTTP(S)负载均衡器。
它们是两种解决方案(感谢gcbirzan帮助我解决GCP松弛问题):
1) 使用IP地址范围内的良好IP更新我的nginx配置:
IP地址范围可在此处找到:https://console.cloud.google.com/networking/networks/list.您只需为一个区域或所有需要的区域添加set_real_ip_from。不要忘记real_ip_recursive;
server {
listen 80;
root /usr/share/nginx/html;
location / {
set_real_ip_from 10.128.0.0/20;
...
real_ip_header X-Forwarded-For;
real_ip_recursive on;
allow 130.211.0.0/22; #Google IP
allow $CLIENT_IP; # FILTERED IP
allow 10.0.0.0/8; #internal network
deny all;
index index.html index.htm;
try_files $uri $uri/ /index.html =404;
}
}
2) 使用以下内容更新我的后端配置:
外部流量策略:本地
apiVersion: v1
kind: Service
metadata:
name: app-backend
spec:
type: NodePort
selector:
app: app-angular
ports:
- port: 80
targetPort: 80
externalTrafficPolicy: Local
更新nginx配置:
现在,$remote_addr中显示的IP将被设置为客户端请求的负载平衡器IP和google Infra IP:130.211。0.0/22,35.191.0.0/16
别忘了真正的爱;
server {
listen 80;
root /usr/share/nginx/html;
location / {
set_real_ip_from $LB_IP;
set_real_ip_from 130.211.0.0/22;
set_real_ip_from 35.191.0.0/16;
real_ip_header X-Forwarded-For;
real_ip_recursive on;
allow 130.211.0.0/22; #Google IP
allow 35.191.0.0/16; #Google IP
allow $CLIENT_IP; # FILTERED IP
allow 10.0.0.0/8; #internal network
deny all;
index index.html index.htm;
try_files $uri $uri/ /index.html =404;
}
}
我在GCP中配置了Kubernetes集群,如下所示, 进入。亚马尔 应用程序。亚马尔 默认后端。亚马尔 我的健康检查很好,负载平衡器已经启动并运行。我也可以点击默认后端。但是当我试着打的时候, 我在404状态码的postman中发现以下错误, 但是API在服务中可用,当我将服务从NodePort切换到LoadBalancer时,我可以使用LoadBalancer IP访问API。有人能帮我解决这
GLBC GLBC is a GCE L7 load balancer controller that manages external loadbalancers configured through the Kubernetes Ingress API. Overview See here for high-level concepts on Ingress in Kubernetes. Fo
我有一个服务: 和一个入口路径: 但保存入口返回: 同步期间出错:评估入口规范时出错:服务“default/ExternalName”类型为“ExternalName”,应为“NodePort”或“LoadBalancer” GCE入口应支持外部名称服务(或者至少没有易于查找的文档表明存在其他错误),并且该错误很难追踪。
问题内容: 当前,在Sass文件中,我们具有以下内容: 这很不好,因为我们实际上不确定路径:可能是,因为npm是如何安装东西的。 在Sass中,有没有一种方法可以搜索直到找到node_modules?甚至是通过npm包含Sass的正确方法? 问题答案: 如果您在2017年寻找方便的答案并使用Webpack,这是我发现的最简单的方法。 假设您的模块路径如下: 然后,您可以在主要的scss文件中使用:
当通过java将列名写入CSV文件时,列中两个单词之间的空格将显示为双引号。。。 例如,测试数据[0][36]=“True Accept”;在csv文件中显示为True“Accept”。。 有没有办法解决这个问题? 代码如下: 编辑:这是解决方案: CSVWriter writer=new CSVWriter(new FileWriter(“list\u of_churers.csv”)、'、'、
我想从我的脚本中实现一个自定义的nginx缓存控制方法,通过使用自定义标头:"Do-Cache"。我用在nginx的超文本传输协议块: 在nginx的服务器块中: 因此,对于Do-Cache: Public,nginx应该缓存响应。否则不会。 但这种配置不起作用。通过在日志中调试,和的值是正确的,直到它们在nginx的服务器块中使用为止。如果在服务器块中使用它们(,或简单的),则变量获得“1”值,