我创建了一个服务,每个服务都创建一个新的负载均衡器,我不想为每个服务创建一个新的负载均衡器。为此,我找到了解决方案入口控制器,但它没有发生。
我们目前正在设置一个 kubernetes 集群来部署我们的生产工作负载(主要是 http Rest 服务)。在这个集群中,我们设置了 nginx 入口控制器来将流量从外部路由到我们的服务。由于入口控制器主要用于路径路由,我确实有以下问题:
是否可以将流量路由到后端,而无需在入口规范中专门指定后端名称?例如我有以下入口:
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: example-ingress
annotations:
nginx.ingress.kubernetes.io/ssl-redirect: "false"
nginx.ingress.kubernetes.io/force-ssl-redirect: "false"
nginx.ingress.kubernetes.io/rewrite-target: /
spec:
rules:
- http:
paths:
- path: /apple
backend:
serviceName: apple-service
servicePort: 8080
Run Code Online (Sandbox Code Playgroud)
是否有可能 /apple 请求被路由到 apple-service 而没有在 serviceName 中具体指定?那么/apple会自动路由到apple-service服务,/orange会自动路由到orange服务而无需显式指定后端名称?
如果没有第 1 点的解决方案,以便我们可以根据某些约定进行部署,那么现在的问题是如何以自动化的方式管理入口。由于服务将通过自动化 CI/CD 管道进行部署,并且当服务添加到集群时可能会添加新路径,那么当部署应用程序时,ci/cd 编排器(例如 jenkins)如何更新入口路由?这样我们就可以确定集群不需要手动干预,并且每个路由都与相应的服务一起部署?
我希望所提供的信息足以理解该问题。非常感谢您的支持。
我正在尝试在 minikube 上运行 ingress。我在 ubnutu 18.04 上运行。我对 nginx-ingress 感兴趣: https: //kubernetes.github.io/ingress-nginx/deploy/
我有一个简单的测试服务,它在 docker 容器内的端口 3000 上运行。该容器被推送到 docker hub。我在那里有简单的获取请求:
app.get('/api/users/currentuser', (req, res) => {
res.send('Hi there!');
});
Run Code Online (Sandbox Code Playgroud)
我已经完成的步骤:minikube 启动,然后minikube 插件启用入口,之后我收到来自 minikube 的消息:
Verifying ingress addon...
The 'ingress' addon is enabled
Run Code Online (Sandbox Code Playgroud)
但当我尝试验证它是否正在运行时,我认为这工作得不好:Output from kubectl get pods -n kube-system
NAME READY STATUS RESTARTS AGE
coredns-66bff467f8-bhqnk 1/1 Running 4 2d8h
etcd-minikube 1/1 Running 4 2d8h
ingress-nginx-admission-create-676jc 0/1 Completed 0 168m
ingress-nginx-admission-patch-bwf7x 0/1 Completed 0 168m
ingress-nginx-controller-7bb4c67d67-x5qzl 1/1 Running 3 168m …Run Code Online (Sandbox Code Playgroud) 我使用 MERN 制作了一个全栈 Web 应用程序,并使用 Kubernetes 集群进行部署。
除了一个问题之外,该应用程序运行良好。也就是说,我(作为用户)能够从浏览器访问 API,例如www.domain-name/api/orders,它为我提供了 JSON 响应。
这是我不想要的。我需要隐藏/限制它。
我使用 NGINX-INGRESS 进行路由:
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: ingress-service
annotations:
kubernetes.io/ingress.class: nginx
nginx.ingress.kubernetes.io/use-regex: 'true'
spec:
rules:
- host: shopify.dev
http:
paths:
- path: /api/users/?(.*)
backend:
serviceName: auth-srv
servicePort: 3000
- path: /api/orders/?(.*)
backend:
serviceName: orders-srv
servicePort: 3000
- path: /?(.*)
backend:
serviceName: client-srv
servicePort: 3000
Run Code Online (Sandbox Code Playgroud)
由于请求 /api 和 /* (前端)都是通过 nginx-ingress 路由的,这是应该如何工作的?解决这个问题的办法是什么?
我有以下 ingress.yaml 文件
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: nginx-configuration-snippet
annotations:
nginx.ingress.kubernetes.io/rewrite-target: /$2
nginx.ingress.kubernetes.io/configuration-snippet: |
location /base/path/v1/api/update {
deny all;
return 404;
}
spec:
rules:
- http:
paths:
- path: /base/path(/|$)(.*)
backend:
serviceName: myApi
servicePort: 8080
Run Code Online (Sandbox Code Playgroud)
但是当我向 https:///base/path/v1/api/update 发送请求时,它成功了,并且在 nginx 入口控制器中出现了以下错误
Error: exit status 1
2020/08/06 18:35:07 [emerg] 1734#1734: location "/base/path/v1/api/update" is outside location "^/base/path(/|$)(.*)" in /tmp/nginx-cfg008325631:2445
nginx: [emerg] location "/base/path/v1/api/update" is outside location "^/base/path(/|$)(.*)" in /tmp/nginx-cfg008325631:2445
nginx: configuration file /tmp/nginx-cfg008325631 test failed
Run Code Online (Sandbox Code Playgroud)
有人可以帮忙吗?
nginx kubernetes kubernetes-helm kubernetes-ingress nginx-ingress
我正在尝试为 proxy-body-size 注释设置一个值,但我确定如何得出相同的数字。例如,如果我推送价值 2GB 的数据,则 1GB 的主体大小会引发“413 请求太大”错误,而 3GB 的限制则可以正常工作。
所以我想了解 nginx 中的 body size 到底是什么。它是一个数据包/整个数据的较小部分还是整个数据(比如我如上所述推送的 2GB)。
任何帮助将不胜感激。
我正在尝试进行这样的设置:
显然他们每个人都独立的应用程序并且应该能够继续自己的道路,ex. http://example.com/api/v1/test?v=ok
现在我有一个像这样的yaml:
apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
name: test-ingress
annotations:
nginx.ingress.kubernetes.io/rewrite-target: /$2
spec:
rules:
- http:
paths:
- path: /
backend:
serviceName: frontend-service
servicePort: 80
- path: /api(/|$)(.*)
backend:
serviceName: backend-service
servicePort: 80
- path: /authentication(/|$)(.*)
backend:
serviceName: identityserver-service
servicePort: 80
Run Code Online (Sandbox Code Playgroud)
/api 和 /authentication 的行为符合我想要的方式,但前端的子路径不起作用。所以例如 http://example.com/css/bootstrap.css找不到。
到目前为止我已经尝试过
1-(/|$)(.*)在前端路径的and处添加
2-添加具有相同支持和端口和路径的前端路径的副本/.*
他们都没有解决问题。
这是描述结果:
Name: test-ingress
Namespace: default
Address: 127.0.0.1
Default backend: default-http-backend:80 (<error: endpoints "default-http-backend" not found>)
Rules:
Host Path Backends …Run Code Online (Sandbox Code Playgroud) 我有很多 IP,我只想允许这些 IP 进入我的入口
我知道我可以在入口注释中做到这一点,
nginx.ingress.kubernetes.io/whitelist-source-range: 10.0.0.0/16
但我想要的是我有多个 IPS,而不仅仅是10.0.0.0/16
因此,如果例如我有像178.1.0.2/17、 、 之类的 IP 10.0.0.0/16,178.2.0.3/18并且我只想允许这些 IP 进入我的入口,那么我怎样才能实现这一点。
kubernetes google-kubernetes-engine kubernetes-ingress nginx-ingress gke-networking
相关 Github 问题:https://github.com/kubernetes/ingress-nginx/issues/6519
apiVersion: v1
data:
server-snippet: |
if ($http_x_azure_fdid !~* "55ce4ed1-4b06-4bf1-b40e-4638452104da" ) {
return 403;
}
use-forwarded-headers: "true"
kind: ConfigMap
Run Code Online (Sandbox Code Playgroud)
在以下方法中设置值时如何使用 helm 实现上述配置?
helm upgrade --install nginx-ingress-controller ingress-nginx/ingress-nginx \
--namespace "${namespace}" \
--version "${chart_version}" \
--set controller.replicaCount="${replicas}" \
--set-string controller.config.use-forwarded-headers=true \
--set-string controller.config.server-snippet=<?> \
--debug
Run Code Online (Sandbox Code Playgroud) kubernetes kubernetes-helm azure-aks nginx-ingress azure-front-door
我部署了 2 个基于 angular 的前端应用程序。我使用k8s.gcr.io/ingress-nginx/controller:v0.44.0具有以下配置的ingress-nginx ( ) 将请求路由到这些应用程序:
apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
name: portal-ingress
namespace: default
annotations:
kubernetes.io/ingress.class: nginx
nginx.ingress.kubernetes.io/ssl-redirect: "false"
nginx.ingress.kubernetes.io/use-regex: "true"
nginx.ingress.kubernetes.io/rewrite-target: /$1
spec:
rules:
- http:
paths:
- path: /?(.*)
backend:
serviceName: app1
servicePort: 80
- path: /app2
backend:
serviceName: app2
servicePort: 80
Run Code Online (Sandbox Code Playgroud)
当我点击<ip-address>/它时它路由到app1,但是当我点击<ip-address>/app2它时路由回app1。
kubernetes ×10
nginx-ingress ×10
nginx ×4
azure-aks ×2
devops ×1
docker ×1
node.js ×1
skaffold ×1
yaml ×1