问候人类同胞,
我正在尝试用以下注释将所有传入的流量路由到我的集群:
nginx.ingress.kubernetes.io/auth-url: http://my-auth-service/
我遵循教程,我仍然没有实现路由每个请求到我的认证模块。我遵循的是主仆战略。当我检查构造的nginx文件时,没有找到注释。
我也尝试过在我的一个次要入口文件
auth_request /auth;
auth_request_set $auth_service $upstream_http_auth_service;
proxy_pass $request_uri
proxy_set_header X-foo-Token $auth_service;
我正在使用以下入口控制器版本
Image: nginx/nginx-ingress:1.8.1
Ports: 80/TCP, 443/TCP, 9113/TCP, 8081/TCP
Host Ports: 0/TCP, 0/TCP, 0/TCP, 0/TCP
样本:
主入口
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: master-ingress
annotations:
kubernetes.io/ingress.class: "nginx"
nginx.org/mergeable-ingress-type: "master"
kubernetes.io/ingress.global-static-ip-name: <cluster-ip>
nginx.ingress.kubernetes.io/ssl-redirect: "true"
# nginx.ingress.kubernetes.io/auth-url: http://my-auth-service/
spec:
tls:
- hosts:
- app.myurl.com
secretName: secret-tls
rules:
- host: app.myurl.com
奴才入口
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: pod-ingress
annotations:
kubernetes.io/ingress.class: "nginx"
nginx.org/mergeable-ingress-type: "minion"
# nginx.ingress.kubernetes.io/auth-url: http://my-auth-service/
# nginx.ingress.kubernetes.io/auth-snippet: |
# auth_request /new-auth-service;
# auth_request_set $new_auth_service $upstream_http_new_auth_service;
# proxy_pass $request_uri
# proxy_set_header X-foo-Token $new_auth_service;
nginx.org/rewrites: "serviceName={{ .Values.serviceName }} rewrite=/"
spec:
rules:
- host: {{ .Values.clusterHost }}
http:
paths:
- path: /{{ .Values.serviceName }}/
backend:
serviceName: {{ .Values.serviceName }}
servicePort: 80
所以我能让它工作。首先,matt-j
提供的url帮助我们找到了一个解决方案。
原来,我使用nginx-stable
为我的入口控制器,在这里建议的文档中,我需要使用新的入口控制器版本。我按照说明进行了完全重置,因为我正在处理我的登台环境。(对于生产,我可能会采用零停机时间方法)。安装后,我遇到了一个已知的问题,这与webhook有关,类似的错误可以在这里看到。基本上克服这个错误的一个解决方案是删除validatingwebhookconfigurations
。最后,我应用了入口配置,并做了一些调整,以使用适当的注释,这就产生了魔力。
注意:我遇到了一个关于如何转发授权请求到我的内部集群服务的问题,以修复我使用kubernetes pod的FQDN。
注2:我删除了master minion的概念,因为它们在kubernetes/ingress-nginx中会自动合并更多信息在这里
以下是固定的示例:
主入口
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: master-ingress
annotations:
kubernetes.io/ingress.class: "nginx"
kubernetes.io/ingress.global-static-ip-name: <PUBLIC IP>
spec:
rules:
- host: domain.com
孩子进入
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: {{ .Values.serviceName }}-ingress
annotations:
kubernetes.io/ingress.class: "nginx"
nginx.ingress.kubernetes.io/rewrite-target: /$2
nginx.ingress.kubernetes.io/auth-url: http://<SERVICE NAME>.<NAMESPACE>.svc.cluster.local # using internal FQDN
spec:
rules:
- host: {{ .Values.clusterHost }}
http:
paths:
- path: /{{ .Values.serviceName }}(/|$)(.*)
backend:
serviceName: {{ .Values.serviceName }}
servicePort: 80