Kubernetes 无法访问Kubenetes负载平衡器

Kubernetes 无法访问Kubenetes负载平衡器,kubernetes,kubernetes-ingress,amazon-eks,aws-load-balancer,Kubernetes,Kubernetes Ingress,Amazon Eks,Aws Load Balancer,我正在尝试在AWS EKS群集中主持以下(部署前端)Kubernetes部署,部署部署并创建服务和入口后,所有内容都成功部署和创建,但当我尝试从外部访问负载平衡器DNS时,无法访问此负载平衡器。 有人能指出原因吗 **下面的代码(部署-2048)正在工作,可以访问负载平衡器,但在(部署前端)**的情况下无法访问 containerPort设置为8080,service targetPort设置为80,在原始问题中(没有编辑和附加信息),在部署中,您的端口值配置错误 端口在群集中的指定端口

我正在尝试在AWS EKS群集中主持以下(部署前端)Kubernetes部署,部署部署并创建服务和入口后,所有内容都成功部署和创建,但当我尝试从外部访问负载平衡器DNS时,无法访问此负载平衡器。 有人能指出原因吗

**下面的代码(部署-2048)正在工作,可以访问负载平衡器,但在(部署前端)**的情况下无法访问


containerPort设置为8080,service targetPort设置为80,在原始问题中(没有编辑和附加信息),在部署中,您的端口值配置错误

  • 端口在群集中的指定端口上公开Kubernetes服务。群集中的其他POD可以通过指定端口与此服务器通信
  • TargetPort是服务将向其发送请求的端口,您的pod将监听该端口。容器中的应用程序也需要侦听此端口
  • ContainerPort定义可在容器内访问应用程序的端口
简而言之,部署中的
容器端口
必须与
服务中的
目标端口
具有相同的值

User@herbertgoto有一个好主意,但不幸的是没有明确说明应该做什么。当您将
containerPort
8080
更改为
80
时,它应该可以工作,但我猜在所有资源中重新填充此更改时会出现问题(重新创建入口资源,重新部署pod)

故障排除的第一步应该是检查您的容器是否正在侦听正确的端口。这就是我请求
$netstat
输出的原因

要检查的有用命令是使用
$kubectl get ep
检查服务端点

注意

如果您将跳过服务中的
目标端口
,并且只有
端口
,Kubernetes会根据
端口
自动分配
目标端口

当我只将containerPort和TargetPort设置为8080时。其他的都是80岁。为什么会这样

服务的默认端口为
80
。因此,当您使用端口80创建
服务
时,不需要指定任何其他内容。当您将
服务中的
端口设置为
8080
时,您还需要指定它

我已经用端口
8080
no my
GKE
集群创建了服务

$ kubectl get svc
NAME         TYPE           CLUSTER-IP      EXTERNAL-IP     PORT(S)          AGE
kubernetes   ClusterIP      10.104.0.1      <none>          443/TCP          153m
my-nginx     LoadBalancer   10.104.14.137   34.91.230.207   8080:31311/TCP   9m39s
$ curl 34.91.230.207
curl: (7) Failed to connect to 34.91.230.207 port 80: Connection timed out
$ curl 34.91.230.207:8080
<!DOCTYPE html>
<html>
<head>
<title>Welcome to nginx!</title>
<style>
    body {
...
$kubectl获得svc
名称类型CLUSTER-IP外部IP端口年龄
kubernetes ClusterIP 10.104.0.1 443/TCP 153m
my nginx LoadBalancer 10.104.14.137 34.91.230.207 8080:31311/TCP 9m39s
$34.91.230.207
curl:(7)无法连接到34.91.230.207端口80:连接超时
$34.91.230.207:8080
欢迎来到nginx!
身体{
...
来自浏览器的响应:

仅外部性p ExternalIP:8080 正如您所见,当我没有使用默认的
80
端口时,我需要在浏览器中指定端口
8080
,并使用curl命令

结论:
部署
containerPort
和服务
targetPort
必须具有相同的值。当您使用
port
不同于
80
的服务时,您需要通过添加
来指定它。这就是为什么在internet上的几乎所有指南中,您都可以看到带有值
80
的服务
port

仍然是相同的问题。我将服务的端口从8080更改为8080,尝试使用类型:NodePort而不是类型:LoadBalancer。我尝试了NodePort,但它不起作用,所以我改为LB,所以它在一个端口中起作用,而不是在其他好主意中(向上投票)但是你应该详细说明你的答案,避免只提供一行答案。你想从集群内部访问
LB
?还是你的意思是从外部?编辑-好的,我错过了从外部访问
LB
。因此,通过从外部访问
LB
,你必须首先将其暴露给外部世界。也许这将有助于在上面的注释中,检查
从我之前评论的文档中创建负载平衡器服务
。@Aristole感谢您的注释。请查看上述两个代码是否有任何差异,一个代码中的LB是可访问的,而另一个代码中没有。唯一的区别是选择器名称:/
app.kubernetes.io/
从您的输出来看,它看起来像您的frontend在端口8080上公开。如果您将服务设置为
targetPort:8080
并将部署
containerPort:8080
。您没有任何奇怪的防火墙规则可以阻止80或8080?出于测试目的,您是否可以在2048
alexwhen/docker-2048
的前端映像中使用?它可能与ImageThank相关你的解释给出了正确的方向。
---
apiVersion: v1
kind: Namespace
metadata:
  name: game-2048
---
apiVersion: apps/v1
kind: Deployment
metadata:
  namespace: game-2048
  name: deployment-2048
spec:
  selector:
    matchLabels:
      app.kubernetes.io/name: app-2048
  replicas: 5
  template:
    metadata:
      labels:
        app.kubernetes.io/name: app-2048
    spec:
      containers:
      - image: alexwhen/docker-2048
        imagePullPolicy: Always
        name: app-2048
        ports:
        - containerPort: 80
---
apiVersion: v1
kind: Service
metadata:
  namespace: game-2048
  name: service-2048
spec:
  ports:
    - port: 80
      targetPort: 80
      protocol: TCP
  type: LoadBalancer
  selector:
    app.kubernetes.io/name: app-2048
---
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  namespace: game-2048
  name: ingress-2048
  annotations:
    kubernetes.io/ingress.class: alb
    alb.ingress.kubernetes.io/scheme: internet-facing
    alb.ingress.kubernetes.io/target-type: ip
spec:
  rules:
    - http:
        paths:
          - path: /*
            backend:
              serviceName: service-2048
              servicePort: 80
$ kubectl get svc
NAME         TYPE           CLUSTER-IP      EXTERNAL-IP     PORT(S)          AGE
kubernetes   ClusterIP      10.104.0.1      <none>          443/TCP          153m
my-nginx     LoadBalancer   10.104.14.137   34.91.230.207   8080:31311/TCP   9m39s
$ curl 34.91.230.207
curl: (7) Failed to connect to 34.91.230.207 port 80: Connection timed out
$ curl 34.91.230.207:8080
<!DOCTYPE html>
<html>
<head>
<title>Welcome to nginx!</title>
<style>
    body {
...