NGINX入口控制器不在Amazon EKS上工作
我使用eksctl在私有子网上创建了一个Amazon EKS集群。
eksctl create cluster \
--name eks101 \
--version 1.18 \
--region af-south-1 \
--nodegroup-name standard-workers \
--node-type t3.medium \
--nodes 3 \
--nodes-min 1 \
--nodes-max 4 --managed \
--vpc-private-subnets=subnet-123,subnet-456,subnet-789 \
--node-private-networking
我必须标记私有子网,否则无法创建负载均衡器
aws ec2 create-tags \
--resources subnet-123 subnet-456 subnet-789 \
--tags Key=kubernetes.io/cluster/eks101,Value=owned Key=kubernetes.io/role/elb,Value=1
然后,我使用以下安装说明安装了NGINX入口控制器:https://docs.nginx.com/nginx-ingress-controller/installation/installation-with-manifests/
我使用部署而不是DaemonSet安装了入口控制器
我不得不向loadbalancer aws elb添加以下注释。yaml为it创建负载平衡器:
service.beta.kubernetes.io/aws-load-balancer-internal: "true"
POD和服务都在运行:
# kubectl get pod -n nginx-ingress
NAME READY STATUS RESTARTS AGE
nginx-ingress-576565b59c-s9c6b 1/1 Running 0 3h15m
# kubectl get service -n nginx-ingress
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
nginx-ingress LoadBalancer 172.20.44.89 internal-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx-123456789.af-south-1.elb.amazonaws.com 80:30694/TCP,443:31260/TCP 33s
当我连接到负载平衡器时,我发现404没有找到,这是正确的。
curl -k http://internal-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx-123456789.af-south-1.elb.amazonaws.com/
然后我安装了一个示例应用程序
kubectl apply -f apache-app.yaml
# kubectl get pod
NAME READY STATUS RESTARTS AGE
apache-app-84f76964b5-9c4wc 1/1 Running 0 114s
apache-app-84f76964b5-xvmzx 1/1 Running 0 114s
# kubectl get service
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
apache-app ClusterIP 172.20.243.80 <none> 80/TCP 24s
# kubectl get ing
NAME CLASS HOSTS ADDRESS PORTS AGE
apache-app <none> apache.mydomain.com 80 39s
curl -k -H "Host: apache.mydomain.com" http://internal-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx-123456789.af-south-1.elb.amazonaws.com/
它没有路由到应用程序<甚至当我添加apache时。mydomain。com主机标头
仍然无法找到404
与不带主机标头调用时的响应相同
当我查看nginx入口吊舱日志时,我看到的是:
kubectl get pod -n nginx-ingress
kubectl logs -f --tail 20 $(kubectl get pod -n nginx-ingress | grep Running | awk '{print $1}') -n nginx-ingress
10.249.225.11 - - [14/Dec/2020:11:53:41 +0000] "GET / HTTP/1.1" 404 153 "-" "curl/7.58.0" "-"
10.249.225.11 - - [14/Dec/2020:11:54:31 +0000] "GET / HTTP/1.1" 404 153 "-" "curl/7.58.0" "-"
10.249.225.11 - - [14/Dec/2020:11:58:03 +0000] "GET / HTTP/1.1" 404 153 "-" "curl/7.58.0" "-"
10.249.225.11 - - [14/Dec/2020:12:01:08 +0000] "GET / HTTP/1.1" 404 153 "-" "curl/7.58.0" "-"
10.249.225.11 - - [14/Dec/2020:12:01:11 +0000] "GET / HTTP/1.1" 404 153 "-" "curl/7.58.0" "-"
10.249.225.11 - - [14/Dec/2020:12:01:16 +0000] "GET / HTTP/1.1" 404 153 "-" "curl/7.58.0" "-"
我还能在哪里找到问题?
如果我将应用程序服务更改为LoadBalancer而不是使用入口,它就可以工作。
---
apiVersion: v1
kind: Service
metadata:
name: apache-app
annotations:
service.beta.kubernetes.io/aws-load-balancer-internal: "true"
labels:
spec:
type: LoadBalancer
ports:
- port: 80
targetPort: 80
protocol: TCP
selector:
app: apache-app
如果我将apiVersion升级到apiVersion:networking.k8s.io/v1beta1
,那么我不需要在应用程序入口中指定入口控制器。
apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
name: apache-app
namespace: default
即使入口类设置为默认值:
apiVersion: networking.k8s.io/v1beta1
kind: IngressClass
metadata:
name: nginx
annotations:
ingressclass.kubernetes.io/is-default-class: "true"
spec:
controller: nginx.org/ingress-controller
我仍然必须在我的应用程序入口中指定入口类:
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: apache-app
namespace: default
annotations:
kubernetes.io/ingress.class: "nginx"
具体来说,当我按照谷歌网站上的指示在GKE上设置nginx ingress时,为什么最终会有两个外部IP地址? 这两个IP地址用于LoadBalancer类型的入口资源和服务资源: 以下是我的想法: 这基本上就是我链接到的教程页面上的图表。因此,我希望负载平衡器是L4类型的,并且有一个外部IP(并且不需要花费任何金钱来使用!)。我希望入口(尽管其名称)没有外部IP,因为我用注释标记了它 谷歌应该承
我正在AWS EKS上设置NGINX入口控制器。 我浏览了k8s入口资源,它非常有助于理解我们将LB端口映射到k8s服务端口,例如file Def。我安装了nginx控制器,直到必要的步骤。然后教程指示我创建一个入口资源。 我错过了什么?
我不知道如何在Kubernetes集群(不是minikube)上设置入口控制器。我遵循的每一个nginx入口设置都产生了一个错误,控制器设置不正确。基本上,我想要一个与minikube插件等效的命令来启用入口。谢谢 编辑1- 我正在遵循中提到的安装步骤https://kubernetes.github.io/ingress-nginx/deploy/我已经尝试了baremetal、cloud和其他
操作系统:RHEL7|k8s版本:1.12/13|kubes祈祷|裸机 我部署了一个标准的kubespray裸机集群,我正在尝试了解部署nginx ingress controller的最简单推荐方法是什么,它将允许我部署简单的服务。没有提供负载平衡器。我希望我的主公共IP作为我的服务的endpoint。 Github k8s ingress nginx建议将节点端口服务作为“强制”步骤,这似乎不
我在RedHat EC2实例上安装了Minikube v1.3.1以进行一些测试。 由于nginx-ingress-控制器默认使用的端口已经在使用中,我正在尝试在部署中更改它们,但没有结果。有人能建议如何做吗? 如何知道端口已在使用? 当我使用命令kubectl-n kube system get deployment | grep nginx列出系统吊舱时,我得到: nginx入口控制器0/1
我试图创建一个入口控制器,它指向我通过Nodeport公开的服务。 以下是入口控制器的yaml文件(摘自https://kubernetes.io/docs/tasks/access-application-cluster/ingress-minikube/):