【问题标题】:Kubernetes forbidden: User "system:anonymous" cannot get path "/"Kubernetes 禁止:用户“system:anonymous”无法获取路径“/”
【发布时间】:2020-06-23 22:43:13
【问题描述】:

在部署到 AWS EKS 时,我很难通过 Internet 公开我的应用程序。

我已经创建了一个部署和一个服务,在使用 kubectl 时我可以看到这两个都在运行。我可以看到该应用程序已成功连接到外部数据库,因为它在启动时运行了一个初始化所述数据库的脚本。

我的问题是在尝试通过 Internet 访问应用程序时出现的。我已尝试访问集群端点,但出现此错误:

{
  "kind": "Status",
  "apiVersion": "v1",
  "metadata": {

  },
  "status": "Failure",
  "message": "forbidden: User "system:anonymous" cannot get path "/"",
  "reason": "Forbidden",
  "details": {

  },
  "code": 403
}

但是,如果我访问“/readyz”路径,则会返回“ok”。 "/version" 返回以下内容:

{
  "major": "1",
  "minor": "16+",
  "gitVersion": "v1.16.8-eks-e16311",
  "gitCommit": "e163110a04dcb2f39c3325af96d019b4925419eb",
  "gitTreeState": "clean",
  "buildDate": "2020-03-27T22:37:12Z",
  "goVersion": "go1.13.8",
  "compiler": "gc",
  "platform": "linux/amd64"
}

我的 deployment.yml 文件包含以下内容:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: client
  labels:
    app: client
spec:
  replicas: 1
  selector:
    matchLabels:
      app: client
  template:
    metadata:
      labels:
        app: client
    spec:
      containers:
      - name: client
        image: image/repo
        ports:
        - containerPort: 80
        imagePullPolicy: Always

我的 service.yml:

apiVersion: v1
kind: Service
metadata:
  name: client
  labels:
    run: client
spec:
  type: LoadBalancer
  ports:
    - name: "80"
      port: 80
      targetPort: 80
      protocol: TCP
  selector:
    run: client

我可以看到负载均衡器已在 AWS 控制台中创建,并且我已尝试更新 LB 的安全组以能够与集群端点通信。 LB 仪表板显示一个附加的实例是“OutOfService”,并且在监控选项卡下,我可以看到一个不健康的主机。

我已尝试访问控制台 EC2 区域中提供的负载均衡器端点(这与 kubectl get services 作为 LB 服务的 EXTERNAL-IP 返回的内容相匹配),但我收到了一个空响应在那里。

curl XXXXXXX.eu-west-2.elb.amazonaws.com:80
curl: (52) Empty reply from server

在网络浏览器中访问时也是如此。

我似乎在这个圈子里兜圈子,任何帮助都将不胜感激。

【问题讨论】:

    标签: amazon-web-services kubernetes amazon-eks


    【解决方案1】:

    我已尝试访问负载均衡器端点

    您正在访问 EKS URL,它是 kubernetes apiserver 端点,而不是(希望)为您的 clientService 创建的 LoadBalancer

    你会想要kubectl get -o wide svc client,如果它成功地为你配置了一个 LoadBalancer,那么它的 URL 将出现在输出中。您可以通过kubectl describe svc client 获取有关该情况的更多详细信息,其中将包括在配置期间影响它的任何事件

    【讨论】:

    • 感谢您回复我,我意识到我的问题的结尾可能还不清楚,所以我修改了它(试图解决这个问题已经很长时间了)。我一直在尝试访问 LB 端点(以及为我提供上述输出的集群端点)。
    【解决方案2】:

    由于您的 eks 实例在 LoadBalancer 部分中处于 OutOfService 状态,您应该检查 LoadBalancer 正在哪个端口上进行健康检查。

    您可以通过执行 kubectl get svc client -oyaml 并查看 nodePort 部分来做到这一点。

    之后,检查您的 LoadBalancer 是否正在对这个确切的端口进行健康检查,如果不是,请将其更改为正确的端口。

    如果您有正确的端口,但实例仍然是 OutOfService,那么我建议您转到您的 eks 实例的安全组并从 ELB 授予特定端口访问权限。

    【讨论】:

      【解决方案3】:

      我从来没有在这里找到问题的根源。我重新开始并为我尝试部署的软件使用了一个预制的 Helm 图表,它工作正常。

      【讨论】:

        猜你喜欢
        • 2017-12-19
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-01-11
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多