【问题标题】:Pod assigned node role instead of service account role on AWS EKSPod 分配的节点角色而不是 AWS EKS 上的服务账户角色
【发布时间】:2022-06-11 04:30:23
【问题描述】:

在我开始之前,我已经看到了thisthis 的问题,但它们没有帮助。

我在 AWS EKS 上有一个 k8s 集群,我正在为我的应用程序部署一个自定义 k8s 控制器。使用来自eksworkshop.com 的说明,我使用eksctl 创建了具有适当IAM 角色的服务帐户。我在deployment.yaml 中分配角色,如下所示。我还设置了securityContext,因为这似乎可以解决here 所述的另一种情况下的问题。

apiVersion: apps/v1
kind: Deployment
metadata:
  name: tel-controller
  namespace: tel
spec:
  replicas: 2
  selector:
    matchLabels:
      app: tel-controller
  strategy:
    rollingUpdate:
      maxSurge: 50%
      maxUnavailable: 50%
    type: RollingUpdate
  template:
    metadata:
      labels:
        app: tel-controller
    spec:
      serviceAccountName: tel-controller-serviceaccount
      securityContext:
        fsGroup: 65534
      containers:
      - image: <image name>
        imagePullPolicy: Always
        name: tel-controller
        args:
        - --metrics-bind-address=:8080
        - --health-probe-bind-address=:8081
        - --leader-elect=true
        ports:
          - name: webhook-server
            containerPort: 9443
            protocol: TCP
          - name: metrics-port
            containerPort: 8080
            protocol: TCP
          - name: health-port
            containerPort: 8081
            protocol: TCP
        securityContext:
          readOnlyRootFilesystem: true
          runAsNonRoot: true
          allowPrivilegeEscalation: false

但这似乎不起作用。如果我描述 pod,我会看到正确的角色。

AWS_DEFAULT_REGION:           us-east-1
AWS_REGION:                   us-east-1
AWS_ROLE_ARN:                 arn:aws:iam::xxxxxxxxx:role/eksctl-eks-tel-addon-iamserviceaccount-tel-t-Role1-3APV5KCV33U8
AWS_WEB_IDENTITY_TOKEN_FILE:  /var/run/secrets/eks.amazonaws.com/serviceaccount/token
Mounts:
  /var/run/secrets/eks.amazonaws.com/serviceaccount from aws-iam-token (ro)
  /var/run/secrets/kubernetes.io/serviceaccount from kube-api-access-6ngsr (ro)
  
  

但如果我从控制器应用程序内部执行sts.GetCallerIdentityInput(),我会看到节点角色。显然我得到了一个access denied 错误。

调用者身份:(转到字符串){ 帐户:“xxxxxxxxxxxx”, Arn: "arn:aws:sts::xxxxxxxxxxx:assumed-role/eksctl-eks-tel-nodegroup-voice-NodeInstanceRole-BJNYF5YC2CE3/i-0694a2766c5d70901", 用户 ID:“AROAZUYK7F2GRLKRGGNXZ:i-0694a2766c5d70901” }

这是我通过服务帐户创建的方式

eksctl create iamserviceaccount --cluster ${EKS_CLUSTER_NAME} \
--namespace tel \
--name tel-controller-serviceaccount \
--attach-policy-arn arn:aws:iam::xxxxxxxxxx:policy/telcontrollerRoute53Policy \
--override-existing-serviceaccounts --approve

我过去成功地做到了这一点。这次的不同之处在于我还附加了角色和角色绑定到此服务帐户。我的 rbac.yaml 这个 SA。

apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
  name: tel-controller-role
  labels:
    app: tel-controller
rules:
- apiGroups: [""]
  resources: [events]
  verbs: [create, delete, get, list, update, watch]
- apiGroups: ["networking.k8s.io"]
  resources: [ingressclasses]
  verbs: [get, list]
- apiGroups: ["", "networking.k8s.io"]
  resources: [services, ingresses]
  verbs: [create, get, list, patch, update, delete, watch]
- apiGroups: [""]
  resources: [configmaps]
  verbs: [create, delete, get, update]
- apiGroups: ["coordination.k8s.io"]
  resources: ["leases"]
  verbs: [get, create, update]
- apiGroups: [""]
  resources: [pods]
  verbs: [get, list, watch, update]
- apiGroups: ["", "networking.k8s.io"]
  resources: [services/status, ingresses/status]
  verbs: [update, patch]
---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
  name: tel-controller-rolebinding
  labels:
    app: tel-controller
roleRef:
  apiGroup: rbac.authorization.k8s.io
  kind: ClusterRole
  name: tel-controller-role
subjects:
- kind: ServiceAccount
  name: tel-controller-serviceaccount
  namespace: tel

我在这里做错了什么?谢谢。

PS:我正在使用kubectl进行部署

PPS:来自go.mod 我正在使用github.com/aws/aws-sdk-go v1.44.28

【问题讨论】:

  • 我真的不明白这个问题是如何与服务器/网络相关的基础设施问题。此外,正如建议的那样,SO 在标签上的观察者比服务器故障多。

标签: kubernetes amazon-iam amazon-eks aws-sdk-go eksctl


【解决方案1】:

所以 Go SDK 有 2 种方法来创建会话。显然我正在使用不推荐使用的方法来创建我的会话 (session.New)。使用推荐的方法创建新会话,session.NewSession 解决了我的问题。

【讨论】:

    猜你喜欢
    • 2021-12-29
    • 1970-01-01
    • 2022-08-10
    • 1970-01-01
    • 1970-01-01
    • 2021-01-22
    • 2022-07-28
    • 2022-09-24
    • 2020-02-18
    相关资源
    最近更新 更多