【问题标题】:error: the server doesn't have resource type "svc"错误:服务器没有资源类型“svc”
【发布时间】:2018-07-02 12:03:07
【问题描述】:

Admins-MacBook-Pro:~ Harshin$ kubectl cluster-info Kubernetes master 运行在http://localhost:8080

要进一步调试和诊断集群问题,请使用“kubectl cluster-info dump”。 错误:服务器没有资源类型“服务”

我正在关注这份文件

https://docs.aws.amazon.com/eks/latest/userguide/getting-started.html?refid=gs_card

当我尝试在为亚马逊 eks 配置 kubectl 的第 11 步中测试我的配置时

apiVersion: v1
clusters:
- cluster:
    server: ...
    certificate-authority-data: ....
  name: kubernetes
contexts:
- context:
    cluster: kubernetes
    user: aws
  name: aws
current-context: aws
kind: Config
preferences: {}
users:
- name: aws
  user:
    exec:
      apiVersion: client.authentication.k8s.io/v1alpha1
      command: heptio-authenticator-aws
      args:
        - "token"
        - "-i"
        - "kunjeti"
        # - "-r"
        # - "<role-arn>"
      # env:
        # - name: AWS_PROFILE
        #   value: "<aws-profile>"

【问题讨论】:

  • 看起来您的问题包含集群的真实凭据。我强烈建议您删除它。
  • 现在客户端连接到localhost:8080,使用kubectl --kubeconfig ~/.kube/xxx cluster-info将确保使用特定的配置文件。
  • 我试过 @AntonKostenko 但我得到了同样的错误
  • @Harshin_ 您可能引用了错误的 kubeconfig 文件。因此,您需要在参数中指定配置文件。即上面的文件保存为:~/.kube/kubeconfig,你需要运行kubectl --kubeconfig ~/.kube/kubeconfig cluster-info
  • @EricHo 这行得通,但最终出现另一个错误'错误:服务器没有资源类型“服务”'

标签: kubernetes


【解决方案1】:

将“名称:kubernetes”更改为集群的实际名称。

这是我为解决它所做的工作......

1.启用详细以确保正确读取配置文件。

kubectl 获取 svc --v=10

2.修改文件如下:

apiVersion: v1
clusters:
- cluster:
    server: XXXXX
    certificate-authority-data: XXXXX
  name: abc-eks
contexts:
- context:
    cluster: abc-eks
    user: aws
  name: aws
current-context: aws
kind: Config
preferences: {}
users:
- name: aws
  user:
    exec:
      apiVersion: client.authentication.k8s.io/v1alpha1
      command: aws-iam-authenticator
      args:
        - "token"
        - "-i"
        - "abc-eks"
        # - "-r"
        # - "<role-arn>"
      env:
        - name: AWS_PROFILE
          value: "aws"

【讨论】:

  • 用cli创建了第二个集群,配置几乎一样。有用。我的凭证文件只有一个默认值。对于控制台集群,打印的详细日志是未授权的。
【解决方案2】:

我遇到了类似的问题,但这不是直接的解决方案,而是解决方法。使用 AWS cli 命令创建集群而不是控制台。根据文档,创建集群的用户或角色将拥有主访问权限。

aws eks create-cluster --name <cluster name> --role-arn <EKS Service Role> --resources-vpc-config subnetIds=<subnet ids>,securityGroupIds=<security group id>

确保 EKS 服务角色具有 IAM 访问权限(我已提供 Full 但我猜 AssumeRole 会这样做)。

EC2 机器角色应具有eks:CreateCluster 和 IAM 访问权限。为我工作:)

【讨论】:

  • 这适用于使用联合登录方式登录 AWS 账户的用户。如果您已按照 AWS 入门指南从控制台创建 EKS,则应使用上述命令重新创建。我花了一段时间才解决它。
【解决方案3】:

我遇到了这个问题,发现它是由 ~/.aws/credentials 中的默认密钥设置引起的。 我们有几个针对不同客户的 AWS 账户,以及一个用于我们自己的测试和研究的沙盒账户。所以我们的凭证文件看起来像这样:

[default]

aws_access_key_id = abc

aws_secret_access_key = xyz

region=us-east-1


[cpproto]

aws_access_key_id = abc

aws_secret_access_key = xyz

region=us-east-1

[sandbox]

aws_access_key_id = abc

aws_secret_access_key = xyz

region=us-east-1

我在搞乱我们的沙盒帐户,但 [default] 部分指向另一个帐户。 一旦我将沙盒的密钥放入默认部分,“kubectl get svc”命令就可以正常工作了。

似乎我们需要一种方法来告诉 aws-iam-authenticator 使用哪些密钥与 aws cli 中的 --profile 相同。

【讨论】:

  • 这是我的问题。谢谢!
【解决方案4】:

我想您应该取消注释“env”项目并更改您对 ~/.aws/credentials 的引用 因为您的 aws_iam_authenticator 需要准确的 AWS 凭证。

参考此文档:https://docs.aws.amazon.com/eks/latest/userguide/create-kubeconfig.html

要让适用于 Kubernetes 的 AWS IAM Authenticator 始终使用特定命名的 AWS 凭据配置文件(而不是默认的 AWS 凭据提供程序链),请取消注释 env 行并替换为要使用的配置文件名称。

【讨论】:

    猜你喜欢
    • 2021-06-28
    • 1970-01-01
    • 2019-08-06
    • 2019-08-22
    • 2021-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-10
    相关资源
    最近更新 更多