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

Amazon web services 入口资源与Kubernetes上的NGINX入口控制器,amazon-web-services,nginx,kubernetes,kubernetes-ingress,Amazon Web Services,Nginx,Kubernetes,Kubernetes Ingress,我正在AWS EKS上设置NGINX入口控制器 我浏览了k8s入口资源,了解我们使用文件def将LB端口映射到k8s服务端口非常有帮助。我安装了nginx控制器,直到。然后,本教程指导我创建一个入口资源 但下面它告诉我应用服务配置。我对这个特定于提供商的步骤感到困惑。这在种类、版本、规格定义(服务与入口)方面有所不同 我在这里遗漏了什么?NGINX入口控制器是将您的流量塑造为您的服务的实际过程。基本上类似于传统虚拟机上的nginx或loadbalancer安装。 ingress资源(种类:i

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

我浏览了k8s入口资源,了解我们使用文件def将LB端口映射到k8s服务端口非常有帮助。我安装了nginx控制器,直到。然后,本教程指导我创建一个入口资源

但下面它告诉我应用服务配置。我对这个特定于提供商的步骤感到困惑。这在
种类、版本、规格
定义(服务与入口)方面有所不同


我在这里遗漏了什么?

NGINX入口控制器是将您的流量塑造为您的服务的实际过程。基本上类似于传统虚拟机上的nginx或loadbalancer安装。
ingress资源(种类:ingress)更像旧VM上的nginx配置,您可以在其中定义主机映射、路径和代理

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

以下是一张更好地描述该概念的图表:

注意,如果您已经为您的服务获取了静态IP,则需要将其分配给您的Nginx入口控制器。那么什么是入口?Ingress基本上是一种与Nginx Ingress控制器通信的方式,用于指导进入LB公共IP的流量。现在很清楚,您有一个loadbalancer服务和多个入口资源。每个入口对应一个单独的服务,该服务可以根据您定义服务的方式进行更改,但您得到了这个想法

让我们进入一些yaml代码。如上所述,无论您拥有多少入口资源,您都需要入口控制器服务。因此,请继续在EKS群集上应用

现在,让我们看看您将如何通过Nginx入口向世界公开您的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
名称类型群集IP外部IP端口
wordpress ClusterIP 10.23.XXX.XX 9000/TCP、80/TCP、443/TCP 1m
nginx入口控制器负载平衡器10.23.XXX.XX XX.XX.XXX.XXX 80:X/TCP,443:X/TCP 1m

现在,您可以通过定义的URL访问
wordpress
服务,该URL映射到您的ingress controller LB服务的公共IP。

您的问题是什么?你不明白什么?@Cookie一个是服务型(nginx),另一个是入口型(k8s)。我搞不清楚每一个都将在集群上创建什么入口控制器是面向公众的端点。它本质上是一个loadbalancer服务,它有一个公共IP,通过该IP,流量将被定向到不同的服务。入口资源将位于入口控制器下方一步,它们将被分配与入口控制器负载平衡服务相同的IP地址。根据入口的规格,控制器将流量路由到相应的服务。@CookieMough我是否在AWS上使用先决条件步骤创建了nginx控制器?下一步是创建入口服务。在那里我不知道该选择什么样的服务。k8s文档中说明类型:入口,其中nginx上的一个文件说明类型:服务。无论是否有入口,都需要loadbalancer类型的
nginx入口
服务。创建负载平衡服务,然后入口将发挥作用,以防您有一个服务准备好接受流量。同时查看正确答案。