我搜索(很多天以来......)如何使用 Ingress Nginx 以便使用外部 url 作为后端。
是的,我使用带有 externalName 的服务对象。我还在 nginx 中测试了很多指令但没有成功......
目标很简单:
我的入口可以解析 url-ext.com,但用户不能。当然,url-ext.com 这里有适当的证书,并且公开为 HTTPS ;)。注意:我的入口暴露了 2 个 url,但我认为这并不重要。
我的代码:
服务 :
kind: Service
apiVersion: v1
metadata:
name: external-eip
namespace: external-url
spec:
type: ExternalName
externalName: url-ext.com
Run Code Online (Sandbox Code Playgroud)
入口:
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: external-eip
namespace: external-url
annotations:
kubernetes.io/ingress.class: nginx
nginx.ingress.kubernetes.io/backend-protocol: "HTTPS"
nginx.ingress.kubernetes.io/upstream-vhost: "url-ext.com"
nginx.ingress.kubernetes.io/configuration-snippet: |
# more_clear_input_headers "Host" "X-Forwarded-Host";
more_set_input_headers 'Host: url-ext.com';
proxy_set_header Host url-ext.com;
spec:
rules:
- host: url-public.com
http:
paths:
- path: …Run Code Online (Sandbox Code Playgroud) auth-service我有一个 nginx-ingress在向后端服务发送请求之前调用自定义,使用这个简单的 ConfigMap 和 Ingress:
apiVersion: v1
kind: ConfigMap
metadata:
...
data:
global-auth-url: auth-service-url:8080/authenticate
global-auth-method: GET
---
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
annotations:
kubernetes.io/ingress.class: "nginx"
...
spec:
rules:
- host: host1
http:
paths:
- backend:
serviceName: backend-service
servicePort: 8080
Run Code Online (Sandbox Code Playgroud)
现在我需要一些不同的东西。
如何通过不同的流发送所有具有相同“主机”标头的请求,一个具有 auth-service 并连接到,backend-service1另一个没有任何身份验证并连接到backend-service2?
明确地说,并使用自定义标头“Example-header:test”
auth-service在发送到 之前通过 my 进行身份验证backend-service,就像现在所做的那样。auth-service该过程中使用。我尝试了几件事,即有 2 个 Ingress,一个 ,global-auth-url另一个 ,nginx.ingress.kubernetes.io/enable-global-auth: "false"但始终会调用 auth-service 。
我可以使用 NGINX 来完成此操作,还是必须使用 Istio 或大使?
我使用 Kubespray 部署了一个裸机集群,并启用了 kubernetes 1.22.2、MetalLB 和 ingress-nginx。404 Not found当设置时尝试访问通过 helm 部署的任何服务时,我得到了ingressClassName: nginx。但是,如果我不使用ingressClassName: nginx而是kubernetes.io/ingress.class: nginx在 helm 图表中使用,一切都会正常工作。yaml。我怎样才能让它工作ingressClassName?
这些是我的 kubespray 设置inventory/mycluster/group_vars/k8s_cluster/addons.yml
# Nginx ingress controller deployment
ingress_nginx_enabled: true
ingress_nginx_host_network: false
ingress_publish_status_address: ""
ingress_nginx_nodeselector:
kubernetes.io/os: "linux"
ingress_nginx_tolerations:
- key: "node-role.kubernetes.io/master"
operator: "Equal"
value: ""
effect: "NoSchedule"
- key: "node-role.kubernetes.io/control-plane"
operator: "Equal"
value: ""
effect: "NoSchedule"
ingress_nginx_namespace: "ingress-nginx"
ingress_nginx_insecure_port: 80
ingress_nginx_secure_port: 443
ingress_nginx_configmap:
map-hash-bucket-size: "128"
ssl-protocols: "TLSv1.2 TLSv1.3"
ingress_nginx_configmap_tcp_services:
9000: "default/example-go:8080"
ingress_nginx_configmap_udp_services:
53: …Run Code Online (Sandbox Code Playgroud) 我使用 Vagrant 创建了一个 kubernetes 集群。我为其创建了一个 Nginx Pod 和一个集群 IP 服务。我可以卷曲 Pod 和服务,获得成功的结果。我现在已经从以下位置安装了 Nginx 入口控制器:https: //kubernetes.github.io/ingress-nginx/deploy/#bare-metal-clusters并运行以下命令:
kubectl create ingress nginxingress --rule="/nginx=nginx-service:80" --annotation nginx.ingress.kubernetes.io/rewrite-target=/ --default-backend=nginx-service:80据我所知,它们都已正确设置因为没有错误。但每当我尝试卷曲路径时,它就会失败,控制器不断抛出 404 未找到。更多可能有帮助的信息:
服务:
入口:

任何帮助将不胜感激
kubernetes google-kubernetes-engine kubernetes-ingress nginx-ingress
我使用命令创建了 helm 3 模板helm create microservice。它有以下文件。
/Chart.yaml
./values.yaml
./.helmignore
./templates/ingress.yaml
./templates/deployment.yaml
./templates/service.yaml
./templates/serviceaccount.yaml
./templates/hpa.yaml
./templates/NOTES.txt
./templates/_helpers.tpl
./templates/tests/test-connection.yaml
Run Code Online (Sandbox Code Playgroud)
根据我的应用程序更新了值文件,当我尝试安装 helm chat 时,它给出以下错误消息。
Error: UPGRADE FAILED: template: microservice/templates/ingress.yaml:20:8: executing "microservice/templates/ingress.yaml" at <include "microservice.labels" .>: error calling include: template: no template "microservice.labels" associated with template "gotpl"
helm.go:75: [debug] template: microservice/templates/ingress.yaml:20:8: executing "microservice/templates/ingress.yaml" at <include "microservice.labels" .>: error calling include: template: no template "microservice.labels" associated with template "gotpl"
Run Code Online (Sandbox Code Playgroud)
这是ingress.yaml文件。
{{- if .Values.ingress.enabled -}}
{{- $fullName := include "microservice.fullname" . -}} …Run Code Online (Sandbox Code Playgroud) kubernetes kubernetes-helm kubernetes-ingress nginx-ingress helm3
(在学习 Kubernetes 时,我从未真正找到任何解释这一点的好资源)
场景:
我拥有 mywebsite1.com 和 mywebsite2.com,我想将它们都托管在 Kubernetes 集群中。
我根据以下网站使用 2
kubectl apply -f < url > 命令部署了一个通用的云入口控制器。(mandatory.yaml 和通用 ingress.yaml)
https://kubernetes.github.io/ingress-nginx/deploy/
所以问题是这种架构是什么样的?以及数据如何流入集群?
我有以下配置:
守护进程:
apiVersion: extensions/v1beta1
kind: DaemonSet
metadata:
name: nginx-ingress
namespace: nginx-ingress
spec:
selector:
matchLabels:
app: nginx-ingress
template:
metadata:
labels:
app: nginx-ingress
spec:
serviceAccountName: nginx-ingress
containers:
- image: nginx/nginx-ingress:1.4.2-alpine
imagePullPolicy: Always
name: nginx-ingress
ports:
- name: http
containerPort: 80
hostPort: 80
- name: https
containerPort: 443
hostPort: 443
env:
- name: POD_NAMESPACE
valueFrom:
fieldRef:
fieldPath: metadata.namespace
- name: POD_NAME
valueFrom:
fieldRef:
fieldPath: metadata.name
args:
- -nginx-configmaps=$(POD_NAMESPACE)/nginx-config
- -default-server-tls-secret=$(POD_NAMESPACE)/default-server-secret
Run Code Online (Sandbox Code Playgroud)
主要配置:
apiVersion: v1
kind: ConfigMap
metadata:
name: nginx-config
namespace: nginx-ingress
data:
proxy-set-headers: "nginx-ingress/custom-headers" …Run Code Online (Sandbox Code Playgroud) 我正在使用带有一些私有路由的大型单体应用程序。这些私有路由目前由一个普通的经典 nginx 服务器管理。
我需要将其迁移到 Kubernetes,并且必须拒绝对这些路由的所有外部访问。我正在使用 GKE 和 AFAIK,私有化路由可以在 nginx-ingress 控制器内完成。
我正在尝试使用服务器代码段,但它似乎不起作用。这是当前的代码:
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
annotations:
kubernetes.io/ingress.class: nginx
kubernetes.io/tls-acme: "true"
nginx.org/websocket-services: service-ws
nginx.org/server-snippet: |
location /private {
allow 10.100.0.0/16; #Pods IPs
allow 10.200.0.0/16; #Pods IPs
deny all;
}
generation: 3
Run Code Online (Sandbox Code Playgroud)
结果是 /private 路由总是返回 200 而不是 401/403。我还尝试创建重定向而不是允许/拒绝,并获得 200 而不是 301 重定向。
您是否有一些想法或技巧可以使这项工作发挥作用?
我在gke上使用了nginx入口控制器,默认情况下,这些是我的访问日志:
"10.123.0.20 - [10.123.0.20] - - [22/Apr/2019:18:47:59 +0000] "GET /sdflksdf/sdfsdf HTTP/2.0" 404 0 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_2) AppleWebKit/538.12 (KHTML, like Gecko) Chrome/73.0.3683.100 Safari/537.36" 26 0.002 [default-blah-80] 10.44.0.26:80 0 0.001 404 skjf0s93jf0ws93jfsijf3s3fjs3i
Run Code Online (Sandbox Code Playgroud)
我想在访问日志中添加x-forward-for标头。如果可能的话,Id希望将该字段添加到当前日志行的末尾。或者在日志行的开头也可以,我猜
我正在看他们的文档,但我不清楚如何将x-forwarded-for添加到访问日志:https : //kubernetes.github.io/ingress-nginx/user-guide/nginx-configuration/log-format/
入口如何将 https 流量转发到服务的端口 443(最终转发到我容器上的 8443)?我是否必须对我的入口进行任何更改,还是自动完成。
在 GCP 上,我有一个第 4 层平衡器 -> nginx-ingress 控制器 -> 入口
我的入口是:
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: ingress-keycloak
annotations:
kubernetes.io/ingress.class: "nginx"
certmanager.k8s.io/issuer: "letsencrypt-prod"
certmanager.k8s.io/acme-challenge-type: http01
spec:
tls:
- hosts:
- mysite.com
secretName: staging-iam-tls
rules:
- host: mysite.com
http:
paths:
- path: /auth
backend:
serviceName: keycloak-http
servicePort: 80
Run Code Online (Sandbox Code Playgroud)
我在网上搜索,但我没有看到达到 443 的明确例子。它总是 80(或 8080)
我的服务keycloak-http是(省略,我的容器实际上在 8443 监听)
apiVersion: v1
kind: Service
metadata:
creationTimestamp: 2019-05-15T12:45:58Z
labels:
app: keycloak
chart: keycloak-4.12.0
heritage: Tiller
release: keycloak
name: keycloak-http …Run Code Online (Sandbox Code Playgroud)