无法在 AWS-EKS 上访问 Kubernetes 服务

chr*_*ian 5 amazon-web-services amazon-elb kubernetes amazon-eks

我在 aws 上创建了一个简单的EKS集群,如https://github.com/terraform-providers/terraform-provider-aws/tree/master/examples/eks-getting-started中所述

\n\n

在这个集群中,我创建了一个nginx 部署和一个Loadbalancer类型的服务,如下所述。\n该配置在 minikube 上本地运行。

\n\n

在 AWS 上,我可以看到 pod 和服务已启动,该服务具有外部 IP,我可以使用 kubectl port-forward 访问 pod,并且可以 ping LoadBalancer。

\n\n

但是,我无法通过浏览器通过http://a53439687c6d511e8837b02b7cab13e7-935938560.eu-west-1.elb.amazonaws.com:3001
访问负载均衡器\n我\This site can\xe2\x80\x99t be reached

\n\n

知道我应该去哪里调查吗?

\n\n

NGinx 部署

\n\n
apiVersion: extensions/v1beta1\nkind: Deployment\nmetadata:\n  annotations:\n    deployment.kubernetes.io/revision: "1"\n  labels:\n    run: nginx\n  name: nginx\n  namespace: default\nspec:\n  progressDeadlineSeconds: 600\n  replicas: 1\n  revisionHistoryLimit: 2\n  selector:\n    matchLabels:\n      run: nginx\n  template:\n    metadata:\n      creationTimestamp: null\n      labels:\n        run: nginx\n    spec:\n      containers:\n      - image: nginx\n        imagePullPolicy: Always\n        name: nginx\n        ports:\n          - containerPort: 80\n      dnsPolicy: ClusterFirst\n      restartPolicy: Always\n      schedulerName: default-scheduler\n      securityContext: {}\n      terminationGracePeriodSeconds: 30\n
Run Code Online (Sandbox Code Playgroud)\n\n

NGinx 服务

\n\n
{\n   "kind":"Service",\n   "apiVersion":"v1",\n   "metadata":{\n      "name":"nginx",\n      "labels":{\n         "app":"nginx"\n      }\n   },\n   "spec":{\n      "ports": [\n         {\n           "port":3001,\n           "targetPort":80\n         }\n      ],\n      "selector":{\n         "run":"nginx"\n      },\n      "type": "LoadBalancer"\n   }\n}\n
Run Code Online (Sandbox Code Playgroud)\n\n

支票

\n\n
kubectl get svc\nNAME         TYPE           CLUSTER-IP      EXTERNAL-IP                                                              PORT(S)          AGE\nkubernetes   ClusterIP      172.20.0.1      <none>                                                                   443/TCP          1h\nnginx        LoadBalancer   172.20.48.112   a53439687c6d511e8837b02b7cab13e7-935938560.eu-west-1.elb.amazonaws.com   3001:31468/TCP   45m\n\nkubectl get pod\nNAME                     READY     STATUS    RESTARTS   AGE\nnginx-768979984b-vqz94   1/1       Running   0          49m\n\nkubectl port-forward pod/nginx-768979984b-vqz94 8080:80\nForwarding from 127.0.0.1:8080 -> 80\nForwarding from [::1]:8080 -> 80\n\nping a53439687c6d511e8837b02b7cab13e7-935938560.eu-west-1.elb.amazonaws.com\nPING a53439687c6d511e8837b02b7cab13e7-935938560.eu-west-1.elb.amazonaws.com (62.138.238.45) 56(84) bytes of data.\n64 bytes from 62.138.238.45 (62.138.238.45): icmp_seq=1 ttl=250 time=7.21 ms\n
Run Code Online (Sandbox Code Playgroud)\n\n

服务说明

\n\n
Name:                     nginx\nNamespace:                default\nLabels:                   app=nginx\nAnnotations:              kubectl.kubernetes.io/last-applied-configuration={"apiVersion":"v1","kind":"Service","metadata":{"annotations":{},"labels":{"app":"nginx"},"name":"nginx","namespace":"default"},"spec":{"ports":[{"port...\nSelector:                 run=nginx\nType:                     LoadBalancer\nIP:                       172.20.48.112\nLoadBalancer Ingress:     a53439687c6d511e8837b02b7cab13e7-935938560.eu-west-1.elb.amazonaws.com\nPort:                     <unset>  3001/TCP\nTargetPort:               80/TCP\nNodePort:                 <unset>  31468/TCP\nEndpoints:                10.0.0.181:80\nSession Affinity:         None\nExternal Traffic Policy:  Cluster\nEvents:\n  Type    Reason                Age   From                Message\n  ----    ------                ----  ----                -------\n  Normal  EnsuringLoadBalancer  57m   service-controller  Ensuring load balancer\n  Normal  EnsuredLoadBalancer   57m   service-controller  Ensured load balancer\n
Run Code Online (Sandbox Code Playgroud)\n

Rtm*_*tmY 2

请尝试以下 3 个步骤:

  1. 再次检查服务和部署之间的选择器和标签是否设置正确。

  2. 在AWS内部,转到创建的负载均衡器(可能是经典)的“ Instances ”选项卡,然后检查与LB相关的所有实例的StatusHealty状态:

在此输入图像描述

如果状态不是“InService”或状态不是“Healthy” - 检查这些实例的安全组:
NodePort(在您的情况下为 31468)应该打开以接受流量。

  1. 使用 查看 pod 日志kubectl logs <pod-name>