解决AWS EKS error You must be logged in to the server (Unauthorized)

问题描述 当获取了 EKS kubeconfig 后,使用该 kubeconfig 提示如下报错 bash 1 2 $ kubectl get pod --kubeconfig kubeconfig error: You must be logged in to the server (Unauthorized) 但该 IAM 用户已经存在了管理员权限了 问题原因 该文章有对这个问题进行描述 quote 您不是集群创建者 如果您的 IAM 实体未用于创建集群,说明您不是集群创建者。在这种情况下,请完成以下步骤,将您的 IAM 实体映射到 aws-auth ConfigMap 以允许访问集群 [1] 这里检查和文章描述一致, 但还是这样的问题 bash 1 2 3 4 5 6 $ aws sts get-caller-identity { "UserId": "AIDAXxxxxxxxIIWKMR22Q", "Account": "55555555496", "Arn": "arn:aws:iam::55555555496:user/eks-user" } quote 这是因为,必须将该用户作为集群的 Access 进行关联,而不是授权 “EKS*” 相关权限 图 - 集群用户 选择已经存在的 IAM 用户...

 ·  · 

Amazon ECR自动创建不存在的存储库

Amazon ECR 目前不支持镜像存储库的自动创建。当开发人员向 Amazon ECR 推送一个新进项,如果与其对应的存储库不存在,推送就会失败。Amazon ECR 相比起其他公有云,他的镜像是必须要求 dockerhub.io/test/nginx:version, 这里 nginx 才会被是为一个镜像存储库,而 GCP 的 Artifact registry 是 test (Project )才会被视为一个镜像存储库。这样对于存储仓库就不需要额外创建了。 下文阐述 Amazon ECR创建仓库的方法 方法1:awscli awscli 中有 create-repository 子命令,允许用户创建一个仓库 bash 1 aws ecr create-repository --repository-name ${REPO_NAME} 可以使用脚本来检测仓库是否存在 [1] bash 1 2 3 4 5 6 7 8 9 output=$(aws ecr describe-repositories --repository-names ${REPO_NAME} 2>&1) if [ $? -ne 0 ]; then if echo ${output} | grep -q RepositoryNotFoundException; then aws ecr create-repository --repository-name ${REPO_NAME} else >&2 echo ${output} fi fi 或 [1]...

 ·  · 

创建一个aws ecr自动刷新密钥的sidecar

创建 Dockerfile, 因为需要 aws 命令,就不特别去安装了,直接使用 awslinux 的镜像 docker 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 FROM amazonlinux:2 RUN yum update -y && \ yum install -y awscli jq && \ yum clean all WORKDIR /app COPY refresh-ecr-credentials.sh ENV AWS_REGION=${AWS_REGION:-us-east-1} ENV REFRESH_INTERVAL=${REFRESH_INTERVAL:-3600} ENV CREDENTIALS_DIR=${CREDENTIALS_DIR:-/shared_credentials} ENV AWS_CREDENTIALS_FILE=${AWS_CREDENTIALS_FILE:-/opt/password} RUN mkdir -p ${CREDENTIALS_DIR} ~/.aws /opt && \ chmod 700 ${CREDENTIALS_DIR} ~/.aws /opt && \ chmod +x /app/refresh-ecr-credentials....

 ·  · 

使用terraform利用已有资源创建GKE集群

近日创建GKE集群,需要使用现有的VPC进行创建,所以需要掌握两个步骤,导入资源,创建集群 terraform 导入命令 GCP中的资源地址和 ID。资源地址是指向配置中的资源实例的标识符。ID 是标识 Google Cloud 中要导入的资源的标识符 资源地址通常为 terraform在定义这类资源时配置的(对应提供商支持),以 GCP 为例 Cloud Storage 存储桶, google_storage_bucket.sample,sample 为 id,定义如下 yaml 1 2 3 4 5 6 resource "google_storage_bucket" "sample" { name = "my-bucket" project = "sample-project" location = "US" force_destroy = true } 示例 - 导入现有GKE集群 语法 bash 1 terraform import <resource_name>.<name> <project>/<locations>/<real_resource_name> 实例 bash 1 terraform import google_container_cluster.gke project20231124/asia-east2/gke-prd-cluster-02 输出结果如下 bash 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 $ terraform import google_container_cluster....

 ·  · 

GKE强制升级后JAVA Pod无法识别limit限制

今日 GKE EOL,kubelet 自动升级至1.28后,Java程序在启动后无法识别资源清单中的限制,被大量OOMKill Deployment清单中已经配置了资源限制,例如下面的参数 yaml 1 2 3 4 5 resources: limits: memory: "1Gi" requests: memory: "600Mi" JAVA_OPS参数配置是使用百分比 bash 1 -XX:+UseContainerSupport -XX:InitialRAMPercentage=70.0 -XX:MaxRAMPercentage=70.0 但是启动后无法识别参数,使用 gcloud 登录到主机内查看 jvm 运行状态(因为容器使用 distroless) bash 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 project-20220325-asia-east-2-pool-221ab289-hgnf ~ # nsenter -t 274655 --mount --uts --ipc --net --pid /opt/java/openjdk/bin/java -XX:+UnlockDiagnosticVMOptions -XX:+PrintContainerInfo -version OSContainer::init: Initializing Container Support Detected cgroups v2 unified hierarchy Path to /cpu....

 ·  ·