Skip to content

AWS Controllers for Kubernetes (ACK) 测验 ​

ACK

这些问题基于经过审查的 controller 行为,保留了原有的 15 个主题。

1. ACK 的主要用途是什么? ​

显示答案

通过 Kubernetes APIs 和自定义资源以声明式方式管理 AWS 资源。它并不保证自动节省成本或立即就绪。

2. 每项服务会安装哪个组件? ​

显示答案

一个服务 controller 及其 CRDs。选择所需服务,并在已版本化的 CRDs 中检查受支持的资源和字段。

3. controller 应如何获取 AWS 凭证? ​

显示答案

配置工作负载身份,例如 IRSA 或受支持的 EKS Pod Identity。验证 OIDC 信任关系/关联、ServiceAccount、SDK/agent 兼容性以及最小 IAM 权限。不要将访问密钥存储在 ConfigMaps 中,也不要使用 root 凭证。

4. 哪个值可在删除 CR 后保留 AWS 资源? ​

显示答案

services.k8s.aws/deletion-policy: retain。当前运行时不接受 orphan。优先级依次为 CR、namespace 特定服务 annotation,然后是 controller 默认值。已保留的 AWS 资源仍需要所有权管理和运维操作。

5. 如何接管现有资源? ​

显示答案

使用 ResourceAdoption 的 adoption-policy: adopt 和服务特定的 adoption-fields,并验证 gates、标识符、区域和账户。resource-imported:true 并非此配置;adopt-or-create 可以创建缺失的资源。后续 reconciliation 可能会修改资源,因此应区分接管与只读行为。

6. GA 状态确立了什么? ​

显示答案

它标识 controller 的官方成熟度阶段,而不是对每个 AWS API 或运维要求的支持。应将成熟度与 CRD 的 v1alpha1 字符串区分开,并验证字段、版本发布和运维适用性。

7. 哪个 condition 表示同步,其限制是什么? ​

显示答案

ACK.ResourceSynced=True 描述 controller 同步状态。它并不能证明应用就绪、数据库连接或消息传递正常。请检查其他 conditions 和 AWS 服务状态。

8. 分离团队 namespace 是否就完成了隔离? ​

显示答案

否。默认的 installScope=cluster 会跨 namespace 监视 CR。应同时限制 watchNamespace/installScope、ServiceAccount/IAM/RBAC 和跨 namespace/CARM 行为。namespace 模式仍可能具有用于其 namespace 缓存的 cluster 读取权限。

9. 什么模式可使所需的 AWS 状态与观测到的状态保持一致? ​

显示答案

reconciliation loop 会反复处理受支持的字段和 controller 逻辑。瞬态错误和 AWS 配额会影响它;它不会立即修复所有可能的状态漂移。

10. 哪种 Kubernetes 扩展定义资源输入? ​

显示答案

CRDs。S3 示例使用 Bucket.spec.policy。经审查的版本没有单独的 BucketPolicy 或 IAM RolePolicyAttachment CRDs;请验证实际的 kinds 和 schemas。

11. 在哪里可以找到 ARN? ​

显示答案

当资源提供该值时,使用 status.ackResourceMetadata.arn,包括 NLB 和 TargetGroup。其他 status 字段因资源而异。

12. CARM 与跨集群引用有何不同? ​

显示答案

CARM 配置 controller 通过扮演目标 IAM 角色(AssumeRole) 来管理另一个 AWS 账户,这需要信任关系、AssumeRole 权限、映射和 controller 设置。它并不会让多个集群的竞争性修改变得安全。应将修改所有权与只读引用分离。

13. 带有 Development 标签的 S3 Bucket 示例中应包含什么? ​

显示答案

使用全局唯一名称、实际区域、tagging.tagSet、全部四项 Block Public Access 设置以及加密。应用 bucket policy 前,principal/IAM Role 必须已经存在。请替换示例名称和账户 IDs。

yaml
apiVersion: s3.services.k8s.aws/v1alpha1
kind: Bucket
metadata:
  name: app-data
  namespace: infra
  annotations:
    services.k8s.aws/deletion-policy: retain
spec:
  name: replace-with-globally-unique-bucket-name
  createBucketConfiguration:
    locationConstraint: us-west-2
  publicAccessBlock:
    blockPublicACLs: true
    blockPublicPolicy: true
    ignorePublicACLs: true
    restrictPublicBuckets: true
  encryption:
    rules:
    - applyServerSideEncryptionByDefault:
        sseAlgorithm: AES256
  tagging:
    tagSet:
    - key: Environment
      value: Development
  policy: "{\n  \"Version\": \"2012-10-17\",\n  \"Statement\": [\n    {\n      \"\
    Effect\": \"Allow\",\n      \"Principal\": {\n        \"AWS\": \"arn:aws:iam::123456789012:role/MyApplicationRole\"\
    \n      },\n      \"Action\": \"s3:GetObject\",\n      \"Resource\": \"arn:aws:s3:::replace-with-globally-unique-bucket-name/*\"\
    \n    }\n  ]\n}"

14. 如何检查 ACK S3 chart,安装之前应做什么? ​

显示答案

该命令会离线渲染已固定版本的 OCI chart。在实际 install/upgrade 前,准备好 infra、其 ServiceAccount、IRSA/Pod Identity 和 IAM 权限。渲染并不是 AWS 部署验证。

bash
helm template ack-s3 \
  oci://public.ecr.aws/aws-controllers-k8s/s3-chart \
  --version 1.12.1 --namespace infra \
  --set aws.region=us-west-2 \
  --set installScope=namespace --set watchNamespace=infra \
  --set enableCARM=false --set enableCrossNamespace=false \
  --set serviceAccount.create=false \
  --set serviceAccount.name=ack-s3-controller \
  --set metrics.service.create=true --set deletionPolicy=retain

15. 应检查哪些 status 和 logs? ​

显示答案

指定 namespace 和完全限定的 kinds;检查 conditions/events、controller image/logs、实际账户/区域/权限以及引用。chart label 为 app.kubernetes.io/instance=ack-s3。清除 finalizers 并不是常规修复方法。

bash
kubectl get buckets.s3.services.k8s.aws -n infra
kubectl get bucket.s3.services.k8s.aws app-data -n infra -o json
kubectl describe bucket.s3.services.k8s.aws app-data -n infra
kubectl logs -n infra \
  -l app.kubernetes.io/instance=ack-s3 --all-containers --tail=100
kubectl get events -n infra \
  --field-selector involvedObject.name=app-data

向文档提问

按 Enter 发送,按 Shift+Enter 换行。