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

2 nginx amazon-web-services kubernetes kubernetes-ingress

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

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

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

我在这里遗漏了什么?

coo*_*ugh 8

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

这是一个图表,可以更好地描绘这个概念: nginx-ingress 图片来源

在这一点上,如果您为您的服务获得了一个静态 IP,您需要将它分配给您的 Nginx 入口控制器。那么什么是入口呢?Ingress 基本上是一种让您与 Nginx 入口控制器通信的方式,如何将传入的流量定向到您的 LB 公共 IP。所以现在很清楚,你有一个负载均衡器服务和多个入口资源。每个入口对应于一个服务,该服务可以根据您定义服务的方式进行更改,但您明白了。

让我们进入一些 yaml 代码。如前所述,无论您拥有多少入口资源,您都将需要入口控制器服务。因此,请继续将此代码应用于您的 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}
Run Code Online (Sandbox Code Playgroud)

这会为您的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
Run Code Online (Sandbox Code Playgroud)

现在,如果您运行,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
Run Code Online (Sandbox Code Playgroud)

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