Kubernetes上的入口资源与NGINX入口控制器

时间:2019-02-28 19:20:46

标签: amazon-web-services nginx kubernetes kubernetes-ingress

我正在AWS EKS上设置NGINX入口控制器。

我经历了k8s Ingress资源,这对了解我们将LB端口映射到具有文件def等k8s服务端口非常有帮助。我安装了nginx控制器,直到pre-requisite step。然后,本教程指导我创建一个 ingress 资源。

https://kubernetes.io/docs/tasks/access-application-cluster/ingress-minikube/#create-an-ingress-resource

但是下面是告诉我应用服务配置。我对此特定于提供商的步骤感到困惑。在kind, version, spec定义(服务与入口)方面有所不同。

https://raw.githubusercontent.com/kubernetes/ingress-nginx/master/deploy/provider/aws/service-l7.yaml

我在这里想念什么吗?

2 个答案:

答案 0 :(得分:2)

这是一个概念,起初有些棘手。 Nginx入口控制器不过是LoadBalancer类型的服务。什么是您的服务的面向公众的端点。分配给该服务的IP地址可以将流量路由到多个服务。因此,您可以继续将服务定义为ClusterIP,并通过Nginx入口控制器公开它们。

以下是一个可以更好地描述该概念的图表: nginx-ingress image source

请注意,如果您已为服务获取了静态IP,则需要将其分配给Nginx入口控制器。那么什么是入口?入口基本上是您与Nginx入口控制器进行通信的一种方法,该方法是将传入的流量定向到LB公共IP。因此,现在很明显,您拥有一个负载平衡器服务和多个入口资源。每个入口对应一个服务,可以根据您定义服务的方式进行更改,但是您可以理解。

让我们进入一些Yaml代码。如前所述,无论您拥有多少入口资源,都将需要入口控制器服务。因此,继续将this code应用于您的EKS集群。

现在让我们看看如何通过Nginx-ingress将Pod暴露给世界。假设您有一个wordpress部署。您可以为此应用定义一个简单的ClusterIP服务:

apiVersion: v1
kind: Service
metadata:
  labels:
    app: ${WORDPRESS_APP}
  namespace: ${NAMESPACE}
  name: ${WORDPRESS_APP}
spec:
  type: ClusterIP
  ports:
  - port: 9000
    targetPort: 9000
    name: ${WORDPRESS_APP}
  - port: 80
    targetPort: 80
    protocol: TCP
    name: http
  - port: 443
    targetPort: 443
    protocol: TCP
    name: https
  selector:
    app: ${WORDPRESS_APP}

这将为您的wordpress应用创建服务,该服务无法在群集外部访问。现在,您可以创建一个入口资源来公开此服务:

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  namespace: ${NAMESPACE}
  name: ${INGRESS_NAME}
  annotations:
    kubernetes.io/ingress.class: nginx
    kubernetes.io/tls-acme: "true"
spec:
  tls:
  - hosts:
    - ${URL}
    secretName: ${TLS_SECRET}
  rules:
  - host: ${URL}
    http:
      paths:
      - path: /
        backend:
          serviceName: ${WORDPRESS_APP}
          servicePort: 80

现在,如果您运行kubectl get svc,则可以看到以下内容:

NAME                      TYPE          CLUSTER-IP      EXTERNAL-IP    PORT(S)                   AGE
wordpress                 ClusterIP     10.23.XXX.XX   <none>         9000/TCP,80/TCP,443/TCP   1m
nginx-ingress-controller  LoadBalancer  10.23.XXX.XX    XX.XX.XXX.XXX  80:X/TCP,443:X/TCP   1m

现在,您可以通过定义的URL访问wordpress服务,该URL映射到入口控制器LB服务的公共IP。

答案 1 :(得分:0)

NGINX入口控制器是影响您访问服务流量的实际过程。基本上就像在传统vm上安装nginx或loadbalancer一样。 入口资源(种类:入口)更像旧VM上的nginx-config,您可以在其中定义主机映射,路径和代理。