(O+P)ut

アウトプット



(O+P)ut

エンジニアのアウトプット

【Kubernetes】Failed to watchとエラーが出た際のServiceAccountへの権限追加

スポンサーリンク

事象

Pod(TektonTrigger)を起動した際に以下ログが出力して権限エラーのリスタートが起きている。

$ kubectl get pod
NAME                                                 READY   STATUS    RESTARTS   AGE
tt-test-664dcbd49d-jd2wx   0/1     Running   3          Xs

尚Podのログを確認するとServiceAccountに付与している権限が不足しているエラーメッセージが表示された。

$ kubectl logs tt-test-664dcbd49d-jd2wx
...
E0711 02:02:03.779401       1 reflector.go:127] runtime/asm_amd64.s:1371: Failed to watch *v1alpha1.ClusterInterceptor: failed to list *v1alpha1.ClusterInterceptor: clusterinterceptors.triggers.tekton.dev is forbidden: User "system:serviceaccount:default:test-sa" cannot list resource "clusterinterceptors" in API group "triggers.tekton.dev" at the cluster scope
E0711 02:02:03.779545       1 reflector.go:127] runtime/asm_amd64.s:1371: Failed to watch *v1alpha1.ClusterTriggerBinding: failed to list *v1alpha1.ClusterTriggerBinding: clustertriggerbindings.triggers.tekton.dev is forbidden: User"system:serviceaccount:default:test-sa" cannot list resource "clustertriggerbindings" in API group "triggers.tekton.dev" at the cluster scope
...
環境情報
  • v1.20.8+IKS
  • tektoncd/triggers/cmd/interceptors:v0.14.2

対応策

上記メッセージから同Podに対して以下のビュー権限が不足している。

  • clustertriggerbindings.triggers.tekton.dev
  • clusterinterceptors.triggers.tekton.dev

Podにはtest-saというServiceAccountを付与しているので新たに以下のClusterRoleを作成し

kind: ClusterRole
apiVersion: rbac.authorization.k8s.io/v1
metadata:
  name: tt-clusterrole
rules:
- apiGroups: ["triggers.tekton.dev"]
  resources: ["clustertriggerbindings", "clusterinterceptors"]
  verbs: ["get", "list", "watch"]

元々存在するServiceAccountに紐付けるClusterRoleBindingを生成した。

apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
  name: tt-clusterbinding
subjects:
- kind: ServiceAccount
  name: test-sa
  namespace: default
roleRef:
  apiGroup: rbac.authorization.k8s.io
  kind: ClusterRole
  name: tt-clusterrole

以下、補足です。

補足

TektonのEventListenersはclustertriggerbindings等の情報を取得する必要があるのか同Podの起動時に上記エラーが出ていました。しかしPodに付与しているServiceAccountに解決策の更新をかけるとPodは展開されてEventListnerも確認できました。

$ kubectl get eventlistener
NAME                             ADDRESS                                                                   AVAILABLE   REASON                     READY   REASON
build-deploy-pipeline-listener   http://tt-test-664dcbd49d-jd2wx.default.svc.cluster.local:8080   True        MinimumReplicasAvailable   True

以上、権限エラーの対応としてご参考になれば幸いです。