我在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/app1
和http://external-dns-name/app2
)中,您将访问您的应用程序;在根/
路径中,您将获得<default backend - 404>
。
关于nginx - 使用Kuberenetes入口 Controller 作为集群中其他服务的反向代理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54779374/