我正在AWS EKS上设置NGINX入口控制器。
我浏览了k8s Ingress资源,了解我们将LB端口映射到k8s服务端口非常有用,例如文件def。我安装了……
NGINX入口控制器是实际处理您的服务流量的过程。基本上像传统的vm上的nginx或loadbalancer安装。 入口资源(种类:Ingress)更像是旧VM上的nginx-config,您可以在其中定义主机映射,路径和代理。
这个概念起初有点棘手。 Nginx入口控制器只是一种类型的服务 LoadBalancer 。面向公众的服务端点是什么?分配给此服务的IP地址可以将流量路由到多个服务。因此,您可以继续将您的服务定义为 ClusterIP 并通过Nginx入口控制器暴露它们。
LoadBalancer
ClusterIP
这是一个更好地描绘概念的图表: 图像源
在这方面,如果您已获得服务的静态IP,则需要将其分配给Nginx入口控制器。那么什么是入口? Ingress基本上是一种与您的Nginx入口控制器进行通信的方式,如何将流量传入您的LB公共IP。因此,现在很清楚,您有一个负载均衡器服务和多个入口资源。每个入口对应一个服务,可以根据您定义服务的方式进行更改,但您会明白这一点。
让我们进入一些yaml代码。如上所述,无论您拥有多少入口资源,都需要入口控制器服务。所以继续申请 这段代码 在您的EKS群集上。
现在让我们看看如何通过Nginx-ingress将你的pod暴露给世界。说你有 wordpress 部署。你可以定义一个简单的 ClusterIP 这个应用程序的服务:
wordpress
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 你可以看到以下内容:
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
现在你可以访问你的 wordpress 通过定义的URL进行服务,该URL映射到入口控制器LB服务的公共IP。