如何使用Nginx Ingress将流量从Route53中的域转发到Pod?

时间:2019-04-16 10:02:19

标签: amazon-web-services nginx kubernetes grafana amazon-route53

我使用头盔部署了grafana,现在它在pod中运行。如果将端口3000代理到笔记本电脑,则可以访问它。 我试图将域grafana.something.com指向该吊舱,以便我可以从外部访问它。 我在route53中有一个域,可以将其附加到负载均衡器(应用程序负载均衡器,网络负载均衡器,经典负载均衡器)。该负载平衡器可以将流量从端口80转发到端口80到一组节点(让端口443留待以后使用)。 我真的很努力进行此设置。我确定有些东西丢失了,但我不知道是什么。

我想像的基本图看起来像这样。

Internet
↓↓
route53中的域(grafana.something.com)
↓↓
负载均衡器80到80(应用程序负载均衡器,网络负载均衡器,经典负载均衡器) 我猜想LB会将流量转发到端口80到下面的入口控制器(使用Helm部署Grafana时创建)
↓↓
EKS工作节点组
↓↓
入口资源?????
↓↓
入口控制器-在命名空间测试中使用Helm部署Grafana时创建。

kubectl get svc grafana -n test

grafana Type:ClusterIP ClusterIP:10.x.x.x Port:80/TCP

apiVersion: v1
kind: Service
metadata:
  creationTimestamp: 
  labels:
    app: grafana
    chart: grafana-
    heritage: Tiller
    release: grafana-release
  name: grafana
  namespace: test
  resourceVersion: "xxxx"
  selfLink: 
  uid: 
spec:
  clusterIP: 10.x.x.x
  ports:
  - name: http
    port: 80
    protocol: TCP
    targetPort: 3000
  selector:
    app: grafana
  sessionAffinity: None
  type: ClusterIP
status:
  loadBalancer: {}

↓↓
Pod Grafana正在侦听端口3000。代理到我的笔记本电脑端口3000后,我可以成功访问它。

1 个答案:

答案 0 :(得分:3)

鉴于您似乎没有安装Ingress Controller,如果您在K8S集群中配置了AWS云提供商,则可以按照this guide使用Helm安装Nginx Ingress控制器。

在指南结尾处,您应该为入口控制器创建一个负载平衡器,将Route53记录指向该负载平衡器,并创建一个使用grafana服务的入口。示例:

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  annotations:
    kubernetes.io/ingress.class: nginx
    nginx.ingress.kubernetes.io/app-root: /
    nginx.ingress.kubernetes.io/enable-access-log: "true"
  name: grafana-ingress
  namespace: test
spec:
  rules:
  - host: grafana.something.com
    http:
      paths:
      - backend:
          serviceName: grafana
          servicePort: 80
        path: /

最终的流量路径为:

Route53 -> ELB -> Ingress -> Service -> Pods