nginx - 使用 Kuberenetes 入口控制器作为集群中其他服务的反向代理
问题描述
我在 kops 和 aws 上有一个简单的 Kubernetes 集群,它服务于一个 Web 应用程序,有一个 html 页面和一些 api。它们都作为服务运行。我想公开所有端点(html 和 apis)以使网页正常工作。
我已将 html 服务公开为 LoadBalancer,并且我也在使用 nginx-ingress 控制器。我也想使用相同的 LoadBalancer 来公开其他 api(为每个服务使用不同的 LoadBalancer 似乎是一种糟糕且昂贵的方式),这是我在本地版本中使用 Nginx 反向代理能够做到的通过在 nginx conf 文件中为每个 api 提供不同的路径,来实现同一应用程序。
虽然我不能在集群中做同样的事情,但我尝试了服务入口,但不知何故,如果我添加一个路径,例如“路径:”/mobiles-service“”,然后添加对于它的特定服务,http 请求不会以某种方式重定向到该服务。只有 html 服务适用于根路径。任何帮助,将不胜感激。
解决方案
首先,您需要为在 AWS 上运行的 Kops 集群创建控制器
kubectl apply -f https://raw.githubusercontent.com/kubernetes/kops/master/addons/ingress-nginx/v1.6.0.yaml
然后通过运行检查是否创建了 ingress-nginx 服务:
kubectl get svc ingress-nginx -n kube-ingress
然后为您的每个应用程序创建您的 pod 和 ClusterIP 类型的服务,如下面的示例:
kind: Service
apiVersion: v1
metadata:
name: app1-service
spec:
selector:
app: app1
ports:
- port: <app-port>
然后创建入口规则文件,如下例所示:
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: example-ingress
annotations:
ingress.kubernetes.io/rewrite-target: /
spec:
rules:
- http:
paths:
- path: /app1
backend:
serviceName: app1-service
servicePort: <app1-port>
- path: /app2
backend:
serviceName: app2-service
servicePort: <app2-port>
部署此入口规则 yaml 后,Kubernetes 会在您的集群上创建一个入口资源。在您的集群中运行的 Ingress 控制器负责创建一个 HTTP(S) 负载均衡器,以将所有外部 HTTP 流量(在端口 80 上)路由到您在指定路径上公开的后端应用服务。
您可以通过运行查看新创建的入口规则:
kubectl get ingress
您将看到如下输出:
NAME HOSTS ADDRESS PORTS AGE
example-ingress * a886e57982736434e9a1890264d461398-830017012.us-east-2.elb.amazonaws.com 80 1m
在相关路径中http://external-dns-name/app1
,http://external-dns-name/app2
您将访问您的应用程序并在根/
路径中,您将获得<default backend - 404>
推荐阅读
- python - 函数的行为可以像函数 * 和 * 上下文管理器一样吗?
- swift - IB Designables:无法渲染和更新自动布局状态...代理崩溃
- javascript - 如何使用 js 编码的机器人在 Discord 中发送嵌入?
- flutter - 我在升级“位置服务”时遇到这个问题
- php - 验证 Google reCAPTCHA v2
- c# - ASP.NET MVC 在数据库中搜索字谜的最佳方法
- html - 为什么我的 React.Portal() 中的圆圈无法在我的 div 中心垂直和水平对齐?
- java - SDKmanager:警告:无法创建设置。java.lang.IllegalArgumentException
- intellij-idea - Intellij Ultimate 2019.3.3 如何从文件运行 SQL
- dism - 我在尝试使用 /RestoreHealth 选项运行 DISM 时不断收到错误 0x800f081f(Windows 10 Pro)