nginx - 使用Kuberenetes入口 Controller 作为集群中其他服务的反向代理

标签 nginx kubernetes kubernetes-ingress

我在kops和aws上有一个简单的Kubernetes集群,该集群服务于一个Web应用程序,有一个HTML页面和一些API。它们都作为服务运行。我想公开展示所有端点(html和api),以使网页正常工作。

我已经将html服务作为LoadBalancer公开,并且我也在使用nginx-ingress Controller 。我也想使用相同的LoadBalancer来公开其他api(对每个服务使用不同的LoadBalancer似乎是一种糟糕且昂贵的方式),这是我能够在本地版本中使用Nginx反向代理来完成的通过为nginx conf文件中的每个api提供不同的路径来实现相同的应用程序。

尽管我无法在集群中执行相同的操作,但是我尝试了Service ingress,但是如果添加路径(例如, “路径:” / mobiles-service“”,然后为其添加特定的服务,http请求不会以某种方式重定向到该服务。只有html服务可在根路径上使用。任何帮助,将不胜感激。

最佳答案

首先,您需要为在AWS上运行的Kops集群创建 Controller

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 Controller 负责创建HTTP(S)负载均衡器,以将所有外部HTTP流量(在端口80上)路由到您在指定路径上公开的后端中的App Services。

您可以通过运行以下命令查看新创建的入口规则:
kubectl get ingress

您将看到如下输出:
NAME              HOSTS   ADDRESS                                                                  PORTS   AGE
example-ingress   *       a886e57982736434e9a1890264d461398-830017012.us-east-2.elb.amazonaws.com   80      1m

在相关路径(如http://external-dns-name/app1http://external-dns-name/app2)中,您将访问您的应用程序;在根/路径中,您将获得<default backend - 404>

关于nginx - 使用Kuberenetes入口 Controller 作为集群中其他服务的反向代理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54779374/

相关文章:

python - 有太多 uwsgi OSError 消息

C语言FastCGI与Nginx

docker - 将简单的docker compose连接到nginx?

Nginx.ingress.kubernetes.io/proxy-body-size 不起作用

websocket - GKE Ingress 在使用 https 时丢弃 websocket 连接

java - 调用在 GCP 中部署的 Spring Boot 应用程序中配置的端点时收到 502 Bad Gateway

kubernetes - 检查 etcd 运行状况时超出上下文截止日期

docker - Kubernetes允许容器退出而无需重启pod

nginx - ingress-nginx 永久重定向 301 不工作

kubernetes - Kubernetes Pod 之间的通信