diff --git a/internal/selfhosted/cert.go b/internal/selfhosted/cert.go new file mode 100644 index 0000000..54170da --- /dev/null +++ b/internal/selfhosted/cert.go @@ -0,0 +1 @@ +package selfhosted diff --git a/internal/selfhosted/oidc.go b/internal/selfhosted/oidc.go new file mode 100644 index 0000000..54170da --- /dev/null +++ b/internal/selfhosted/oidc.go @@ -0,0 +1 @@ +package selfhosted diff --git a/internal/selfhosted/webhook/auth.yaml b/internal/selfhosted/webhook/auth.yaml new file mode 100644 index 0000000..b4ceb4b --- /dev/null +++ b/internal/selfhosted/webhook/auth.yaml @@ -0,0 +1,57 @@ +apiVersion: v1 +kind: ServiceAccount +metadata: + name: pod-identity-webhook + namespace: kube-system +--- +apiVersion: rbac.authorization.k8s.io/v1 +kind: ClusterRole +metadata: + name: pod-identity-webhook +rules: +- apiGroups: + - "" + resources: + - secrets + verbs: + - create +- apiGroups: + - "" + resources: + - secrets + verbs: + - get + - update + - patch + resourceNames: + - "pod-identity-webhook" +- apiGroups: + - "" + resources: + - serviceaccounts + verbs: + - get + - watch + - list +- apiGroups: + - certificates.k8s.io + resources: + - certificatesigningrequests + verbs: + - create + - get + - list + - watch +--- +apiVersion: rbac.authorization.k8s.io/v1 +kind: ClusterRoleBinding +metadata: + name: pod-identity-webhook +roleRef: + apiGroup: rbac.authorization.k8s.io + kind: ClusterRole + name: pod-identity-webhook +subjects: +- kind: ServiceAccount + name: pod-identity-webhook + namespace: kube-system \ No newline at end of file diff --git a/internal/selfhosted/webhook/deployment.yaml b/internal/selfhosted/webhook/deployment.yaml new file mode 100644 index 0000000..97b776e --- /dev/null +++ b/internal/selfhosted/webhook/deployment.yaml @@ -0,0 +1,36 @@ +apiVersion: apps/v1 +kind: Deployment +metadata: + name: pod-identity-webhook + namespace: kube-system +spec: + replicas: 1 + selector: + matchLabels: + app: pod-identity-webhook + template: + metadata: + labels: + app: pod-identity-webhook + spec: + serviceAccountName: pod-identity-webhook + containers: + - name: pod-identity-webhook + image: quay.io/amis/pod-identity-webhook:v0.0.1 + imagePullPolicy: Always + command: + - /webhook + - --in-cluster + - --namespace=kube-system + - --service-name=pod-identity-webhook + - --tls-secret=pod-identity-webhook + - --annotation-prefix=eks.amazonaws.com + - --token-audience=sts.amazonaws.com + - --logtostderr + volumeMounts: + - name: webhook-certs + mountPath: /var/run/app/certs + readOnly: false + volumes: + - name: webhook-certs + emptyDir: {} \ No newline at end of file diff --git a/internal/selfhosted/webhook/mutatingwebhook-ca-bundle.yaml b/internal/selfhosted/webhook/mutatingwebhook-ca-bundle.yaml new file mode 100644 index 0000000..c002c01 --- /dev/null +++ b/internal/selfhosted/webhook/mutatingwebhook-ca-bundle.yaml @@ -0,0 +1,19 @@ +apiVersion: admissionregistration.k8s.io/v1beta1 +kind: MutatingWebhookConfiguration +metadata: + name: pod-identity-webhook + namespace: kube-system +webhooks: +- name: pod-identity-webhook.amazonaws.com + failurePolicy: Ignore + clientConfig: + service: + name: pod-identity-webhook + namespace: kube-system + path: "/mutate" + caBundle: LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSURQekNDQWllZ0F3SUJBZ0lVTjVSVnlOTHRhM2pxZkxiS2I5VmFBY0JZaDFnd0RRWUpLb1pJaHZjTkFRRUwKQlFBd0x6RXRNQ3NHQTFVRUF3d2tjRzlrTFdsa1pXNTBhWFI1TFhkbFltaHZiMnN1YTNWaVpTMXplWE4wWlcwdQpjM1pqTUI0WERUSTBNRE13T1RFd016VXlOMW9YRFRJMU1ETXdPVEV3TXpVeU4xb3dMekV0TUNzR0ExVUVBd3drCmNHOWtMV2xrWlc1MGFYUjVMWGRsWW1odmIyc3VhM1ZpWlMxemVYTjBaVzB1YzNaak1JSUJJakFOQmdrcWhraUcKOXcwQkFRRUZBQU9DQVE4QU1JSUJDZ0tDQVFFQXpSYzY0d2V0TzBSVFNOT2V2c3dqd0JpQjZjMFRaKzRubWhYeQpnVEVxNk9MUXZ5R1k4SlBwKzZTZG1qaGFlRGd2SGxmOU1NODNxa2FzdlBzY0Znd0lkOThwQUhwKzhkdEg3RTlNCjZNNCtDZm5LU2V3QmIrQ25YN0lkeGN2Z3hvSE5rMDcvbERhaXJ5TEVTaFprcnphaW9TYW9rb0dIdStaQmhONHYKdVBrK0xiTGVoSW9QUXdYcm9pMHU3dW4yd2NQaExNSENMckZzUzFTQ3pCMm1xdWN1ZFNNOFNOSWpPUGRRVE90VwpNQmNpMmU2MENQTEEzUWVFUkZnbXdzMEVnV3dyc2ZlVjB5ay83SjBTbFJoVStvQWdJajdLSWlxblFjZU54VFl1CmRrMndaL1JDM0wxck40S0xtb1ArS2dWQU9LK3Q4VjlNbVRzVE9pTHJ3WXhnOE14RWVRSURBUUFCbzFNd1VUQWQKQmdOVkhRNEVGZ1FVQzdxOTcxMDk1V3NLdVpFZ0RiRm9SUVZ6M2N3d0h3WURWUjBqQkJnd0ZvQVVDN3E5NzEwOQo1V3NLdVpFZ0RiRm9SUVZ6M2N3d0R3WURWUjBUQVFIL0JBVXdBd0VCL3pBTkJna3Foa2lHOXcwQkFRc0ZBQU9DCkFRRUFsOU92Z2Z6eXZSSVFzVXU5ckFMS3psS2FWa0xDTUczczlpblR1c3M1YkRBY2t2cTM3Y04wQzdzd1Q4TU4KTzhNcU9mS3lHa2xSWHZCT1pCZ2tGYmx6U0xPREhORFpnSXZacmYxM2JrK1lCUG5ZOVdyeWVidzFHd0lUWTdNQwo1ZFhyYm9JOWtaOUY1c0NiMzNtYTZFdVhKVlpvS0JFc2U3Z20yckhsOVF4d253NVNrbDFtN2QxeS9nQS9YUll0CmJIbkkzVjlycHpzb0grZzYrdjBxU1Y2dDVHYVpsbW0veFJ5YzNKRmtvaU5xQk44MlVwMTFNUlhjd04wTlpSN2oKZjVEVFJxVHdSKzAzT0I1T1k2R2tyclkrK1IybGdKUk1VNE91aHl2cjhqY1N6Q0tNY2dZMjJkc2d5aThTYjFYMQorL3hUcC80VVpSaU5IQUlGcnlaMFY1RlpvQT09Ci0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0K + rules: + - operations: [ "CREATE" ] + apiGroups: [""] + apiVersions: ["v1"] + resources: ["pods"] \ No newline at end of file diff --git a/internal/selfhosted/webhook/mutatingwebhook.yaml b/internal/selfhosted/webhook/mutatingwebhook.yaml new file mode 100644 index 0000000..a05e69e --- /dev/null +++ b/internal/selfhosted/webhook/mutatingwebhook.yaml @@ -0,0 +1,19 @@ +apiVersion: admissionregistration.k8s.io/v1beta1 +kind: MutatingWebhookConfiguration +metadata: + name: pod-identity-webhook + namespace: kube-system +webhooks: +- name: pod-identity-webhook.amazonaws.com + failurePolicy: Ignore + clientConfig: + service: + name: pod-identity-webhook + namespace: kube-system + path: "/mutate" + caBundle: ${CA_BUNDLE} + rules: + - operations: [ "CREATE" ] + apiGroups: [""] + apiVersions: ["v1"] + resources: ["pods"] \ No newline at end of file diff --git a/internal/selfhosted/webhook/service.yaml b/internal/selfhosted/webhook/service.yaml new file mode 100644 index 0000000..04c8741 --- /dev/null +++ b/internal/selfhosted/webhook/service.yaml @@ -0,0 +1,15 @@ +apiVersion: v1 +kind: Service +metadata: + name: pod-identity-webhook + namespace: kube-system + annotations: + prometheus.io/port: "443" + prometheus.io/scheme: "https" + prometheus.io/scrape: "true" +spec: + ports: + - port: 443 + targetPort: 443 + selector: + app: pod-identity-webhook \ No newline at end of file diff --git a/internal/selfhosted/webhook/webhook.go b/internal/selfhosted/webhook/webhook.go new file mode 100644 index 0000000..d770c2c --- /dev/null +++ b/internal/selfhosted/webhook/webhook.go @@ -0,0 +1 @@ +package webhook