Apache Airflow version: v2.0.0a1 (latest master)
Environment:
- OS: Ubuntu 18.04.4 LTS
- Kubernetes: v1.19.3
- Docker: v19.03.12
- Helm: v3.3.4
What happened:
Trying to get a task log via the task instance list (http:localhost:8080/taskinstance/list/) yields an error saying that the ServiceAccount airflow-webserver does not have the permission to list pods/log.
*** Trying to get logs (last 100 lines) from worker pod ***
*** Unable to fetch logs from worker pod ***
(403)
Reason: Forbidden
HTTP response headers: HTTPHeaderDict({'Cache-Control': 'no-cache, private', 'Content-Type': 'application/json', 'X-Content-Type-Options': 'nosniff', 'Date': 'Tue, 20 Oct 2020 16:36:31 GMT', 'Content-Length': '296'})
HTTP response body: b'{"kind":"Status","apiVersion":"v1","metadata":{},"status":"Failure","message":"pods is forbidden: User \\"system:serviceaccount:airflow:airflow-webserver\\" cannot list resource \\"pods/log\\" in API group \\"\\" in the namespace \\"airflow\\"","reason":"Forbidden","details":{"kind":"pods"},"code":403}\n'
How to reproduce it:
I created a Kubernetes Cluster using kubeadm and added Flannel as Pod Network. Afterward I built the Airflow production image via breeze, then deployed it to Cluster via helm (Mounting DAGS from an externally populated PVC)
$~ ./breeze build-image --production-image
$~ helm install airflow . \
--namespace airflow \
--set dags.persistence.enabled=true \
--set dags.persistence.existingClaim=my-hostPath-claim \
--set dags.gitSync.enabled=false \
--set uid=1000 \
--set gid=1000 \
--set executor=KubernetesExecutor \
--set images.airflow.tag=master-python3.6
$~ kubectl get pods -n airflow
NAME READY STATUS RESTARTS AGE
airflow-postgresql-0 1/1 Running 0 75m
airflow-scheduler-6df9cf9855-4xzd4 2/2 Running 0 75m
airflow-statsd-5556dc96bc-zdtjp 1/1 Running 0 75m
airflow-webserver-dc8c746b7-9wqlh 1/1 Running 0 75m
I triggered a simple DAG. Also posting it here for completeness.
DAG file
from airflow import DAG
from datetime import timedelta, datetime
from airflow.operators.bash_operator import BashOperator
dag = DAG(
'simple_dag',
default_args= {
'owner': 'airflow',
'depends_on_past': False,
'retries' : 0,
'start_date': datetime(1970, 1, 1),
'retry_delay': timedelta(seconds=30),
},
description='',
schedule_interval=None,
catchup=False,
)
t1 = BashOperator(
task_id='task1',
bash_command='echo 1',
dag=dag
)
Possible solution:
Checking airflow/chart/templates/rbac/pod-launcher-rolebinding.yaml I can verify that the ServiceAccount airflow-webserver can't get the needed airflow-pod-launcher-role permissions (as stated in the error). Also I think airflow/chart/templates/rbac/pod-launcher-role.yaml additionally needs the "list" verb for the "pods/log" resource. Applying these changes gets rid of the error but yields a different error. Nevertheless should I add these changes to the chart templates?
*** Trying to get logs (last 100 lines) from worker pod ***
*** Unable to fetch logs from worker pod ***
(400)
Reason: Bad Request
HTTP response headers: HTTPHeaderDict({'Cache-Control': 'no-cache, private', 'Content-Type': 'application/json', 'Date': 'Tue, 20 Oct 2020 16:29:32 GMT', 'Content-Length': '136'})
HTTP response body: b'{"kind":"Status","apiVersion":"v1","metadata":{},"status":"Failure","message":"name must be provided","reason":"BadRequest","code":400}\n'
Apache Airflow version: v2.0.0a1 (latest master)
Environment:
What happened:
Trying to get a task log via the task instance list (http:localhost:8080/taskinstance/list/) yields an error saying that the ServiceAccount airflow-webserver does not have the permission to list pods/log.
How to reproduce it:
I created a Kubernetes Cluster using
kubeadmand added Flannel as Pod Network. Afterward I built the Airflow production image via breeze, then deployed it to Cluster viahelm(Mounting DAGS from an externally populated PVC)$~ ./breeze build-image --production-image $~ helm install airflow . \ --namespace airflow \ --set dags.persistence.enabled=true \ --set dags.persistence.existingClaim=my-hostPath-claim \ --set dags.gitSync.enabled=false \ --set uid=1000 \ --set gid=1000 \ --set executor=KubernetesExecutor \ --set images.airflow.tag=master-python3.6 $~ kubectl get pods -n airflow NAME READY STATUS RESTARTS AGE airflow-postgresql-0 1/1 Running 0 75m airflow-scheduler-6df9cf9855-4xzd4 2/2 Running 0 75m airflow-statsd-5556dc96bc-zdtjp 1/1 Running 0 75m airflow-webserver-dc8c746b7-9wqlh 1/1 Running 0 75mI triggered a simple DAG. Also posting it here for completeness.
DAG file
Possible solution:
Checking
airflow/chart/templates/rbac/pod-launcher-rolebinding.yamlI can verify that the ServiceAccount airflow-webserver can't get the needed airflow-pod-launcher-role permissions (as stated in the error). Also I thinkairflow/chart/templates/rbac/pod-launcher-role.yamladditionally needs the "list" verb for the "pods/log" resource. Applying these changes gets rid of the error but yields a different error. Nevertheless should I add these changes to the chart templates?