alvarogaroconstella opened a new issue, #46855:
URL: https://github.com/apache/airflow/issues/46855

   ### Apache Airflow version
   
   2.10.5
   
   ### If "Other Airflow 2 version" selected, which one?
   
   _No response_
   
   ### What happened?
   
   I am trying to pass a .yaml file with the kubeconfig of my cluster and 
create a pod using a dag, the fact is that is The error 
kubernetes.client.exceptions.ApiException: (403) Reason: Forbidden keeps 
appearing.
   ```
   HTTP response headers: HTTPHeaderDict({'Audit-Id': 
'16328c7b-8057-4a30-9625-206bd8c052ae', 'Cache-Control': 'no-cache, private', 
'Content-Type': 'application/json', 'X-Content-Type-Options': 'nosniff', 
'X-Kubernetes-Pf-Flowschema-Uid': '05f64062-139b-4118-9727-4804f796adbe', 
'X-Kubernetes-Pf-Prioritylevel-Uid': 'f6addaaf-d023-4008-b9a5-bd8507e0f00c', 
'Date': 'Tue, 18 Feb 2025 09:01:05 GMT', 'Content-Length': '266'})
   
   HTTP response body: 
{"kind":"Status","apiVersion":"v1","metadata":{},"status":"Failure","message":"pods
 is forbidden: User \"system:anonymous\" cannot list resource \"pods\" in API 
group \"\" in the namespace 
\"airflow-idti\"","reason":"Forbidden","details":{"kind":"pods"},"code":403}
   ```
   I have tried setting the service_account_name parameter both with and 
without it, but it doesn't work. The file I pass is a kubeconfig mounted inside 
a path of the Airflow pods, and I’ve confirmed that its value is correct and 
present in all the pods. When I use in_cluster: true, it works, but when 
in_cluster: false, this error always appears and I can't log in. I've followed 
the documentation, but I still encounter this error.
   
   ### What you think should happen instead?
   
   I think that with in_cluster = false and with the kubeconfig file should 
work 
   
   ### How to reproduce
   
   ```
   import logging
   from plugins.utils.region import (
       get_kubeconfig_path_from_region,
       get_region_from_sqs_url,
       print_kubeconfig_info
   )
   from airflow.utils.dates import days_ago
   from airflow.decorators import dag
   from airflow.models.param import Param
   from airflow.providers.cncf.kubernetes.operators.pod import 
KubernetesPodOperator
   from airflow.operators.python import PythonOperator
   logging.basicConfig(level=logging.INFO)
   logger = logging.getLogger(__name__)
   logging.getLogger("elasticsearch").setLevel(logging.ERROR)
   DEFAULT_ARGS = {
       "owner": "airflow",
       "retries": 1,
       "start_date": days_ago(1),
   }
   @dag(
       "trigger_alerts",
       default_args=DEFAULT_ARGS,
       schedule_interval=None,
       catchup=False,
       params={
           "breach_id": Param("a11111111111111111111111", type="string"),
           "user_id": Param("590073c764e160715e845f37", type="string"),
           "queue_name": Param(
               
"http://sqs.us-west-2.localhost.localstack.icloud:4566/000000000000/notify-docker-retrospective";,
               type="string",
           ),
           "slice_id": Param(0, type="integer"),
           "num_slices": Param(0, type="integer"),
       },
   )
   def alert_delivery_isolation():
       """
       Orchestrates the process of fetching alerts, filtering them based on 
provisioning client,
       and sending the filtered alerts to the appropriate SQS queue.
       """
       region = PythonOperator(
           task_id="region",
           python_callable=get_region_from_sqs_url,
           op_args=["{{ params.queue_name }}"],
       )
       kubeconfig_path = PythonOperator(
           task_id="kubeconfig_path",
           python_callable=get_kubeconfig_path_from_region,
           op_args=["{{ ti.xcom_pull(task_ids='region') }}"],
       )
       print_kubeconfig_task = PythonOperator(
           task_id="print_kubeconfig",
           python_callable=print_kubeconfig_info,
           provide_context=True,
       )
       
       write_alert_operator = KubernetesPodOperator(
           name="write_alerts_in_sqs",
           namespace="airflow-idti",
           
image="867215330947.dkr.ecr.us-east-1.amazonaws.com/idtheft-airflow:airflowtesting",
           cmds=["python"],
           arguments=[
               "/opt/airflow/plugins/scripts/trigger_alerts.py",
               "--source_key",
               "{{ params.breach_id }}",
               "--user_id",
               "{{ params.user_id }}",
               "--queue_name",
               "{{ params.queue_name }}",
               "--slice_id",
               "{{ params.slice_id }}",
               "--num_slices",
               "{{ params.num_slices }}",
           ],
           task_id="write_alerts_in_sqs",
           in_cluster=False,
           config_file = "/opt/airflow/kubeconfig/kubeconfig-us.yaml",
           get_logs=True,
           service_account_name='airflow-idti-worker',
           # 
pod_template_file="/opt/airflow/config/kubernetes/pod_template.yaml",
       )
       region >> kubeconfig_path >> print_kubeconfig_task >> 
write_alert_operator
   dag = alert_delivery_isolation()
   ```
   
   
   Kubeconfig file in route /opt/airflow/kubeconfig/kubeconfig-us.yaml: 
   ```
   apiVersion: v1
   clusters:
   - cluster:
       certificate-authority-data: LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tL....
       server: https://xxxxxxxxxxxxxxxxxxxxxxxx.gr7.us-east-1.eks.amazonaws.com
     name: arn:aws:eks:us-east-1:867215330947:cluster/NitoAirflowCluster
   contexts:
   - context:
       cluster: arn:aws:eks:us-east-1:867215330947:cluster/NitoAirflowCluster
       user: arn:aws:eks:us-east-1:867215330947:cluster/NitoAirflowCluster
     name: aws
   current-context: aws
   kind: Config
   preferences: {}
   users:
   - name: arn:aws:eks:us-east-1:867215330947:cluster/NitoAirflowCluster
     user:
       exec:
         apiVersion: client.authentication.k8s.io/v1beta1
         args:
         - --region
         - us-east-1
         - eks
         - get-token
         - --cluster-name
         - NitoAirflowCluster
         - --output
         - json
         command: aws
   ```
   
   Full traceback error: 
   ```
   [2025-02-18, 09:06:06 UTC] {kube_config.py:520} ERROR - [Errno 13] 
Permission denied: 'aws'
   [2025-02-18, 09:06:06 UTC] {taskinstance.py:3311} ERROR - Task failed with 
exception
   Traceback (most recent call last):
     File 
"/home/airflow/.local/lib/python3.11/site-packages/airflow/models/taskinstance.py",
 line 767, in _execute_task
       result = _execute_callable(context=context, **execute_callable_kwargs)
                ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
     File 
"/home/airflow/.local/lib/python3.11/site-packages/airflow/models/taskinstance.py",
 line 733, in _execute_callable
       return ExecutionCallableRunner(
              ^^^^^^^^^^^^^^^^^^^^^^^^
     File 
"/home/airflow/.local/lib/python3.11/site-packages/airflow/utils/operator_helpers.py",
 line 252, in run
       return self.func(*args, **kwargs)
              ^^^^^^^^^^^^^^^^^^^^^^^^^^
     File 
"/home/airflow/.local/lib/python3.11/site-packages/airflow/models/baseoperator.py",
 line 422, in wrapper
       return func(self, *args, **kwargs)
              ^^^^^^^^^^^^^^^^^^^^^^^^^^^
     File 
"/home/airflow/.local/lib/python3.11/site-packages/airflow/providers/cncf/kubernetes/operators/pod.py",
 line 583, in execute
       return self.execute_sync(context)
              ^^^^^^^^^^^^^^^^^^^^^^^^^^
     File 
"/home/airflow/.local/lib/python3.11/site-packages/airflow/providers/cncf/kubernetes/operators/pod.py",
 line 593, in execute_sync
       self.pod = self.get_or_create_pod(  # must set `self.pod` for `on_kill`
                  ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
     File 
"/home/airflow/.local/lib/python3.11/site-packages/airflow/providers/cncf/kubernetes/operators/pod.py",
 line 551, in get_or_create_pod
       pod = self.find_pod(pod_request_obj.metadata.namespace, context=context)
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
     File 
"/home/airflow/.local/lib/python3.11/site-packages/airflow/providers/cncf/kubernetes/operators/pod.py",
 line 524, in find_pod
       pod_list = self.client.list_namespaced_pod(
                  ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
     File 
"/home/airflow/.local/lib/python3.11/site-packages/kubernetes/client/api/core_v1_api.py",
 line 15823, in list_namespaced_pod
       return self.list_namespaced_pod_with_http_info(namespace, **kwargs)  # 
noqa: E501
              ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
     File 
"/home/airflow/.local/lib/python3.11/site-packages/kubernetes/client/api/core_v1_api.py",
 line 15942, in list_namespaced_pod_with_http_info
       return self.api_client.call_api(
              ^^^^^^^^^^^^^^^^^^^^^^^^^
     File 
"/home/airflow/.local/lib/python3.11/site-packages/kubernetes/client/api_client.py",
 line 348, in call_api
       return self.__call_api(resource_path, method,
              ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
     File 
"/home/airflow/.local/lib/python3.11/site-packages/kubernetes/client/api_client.py",
 line 180, in __call_api
       response_data = self.request(
                       ^^^^^^^^^^^^^
     File 
"/home/airflow/.local/lib/python3.11/site-packages/kubernetes/client/api_client.py",
 line 373, in request
       return self.rest_client.GET(url,
              ^^^^^^^^^^^^^^^^^^^^^^^^^
     File 
"/home/airflow/.local/lib/python3.11/site-packages/kubernetes/client/rest.py", 
line 244, in GET
       return self.request("GET", url,
              ^^^^^^^^^^^^^^^^^^^^^^^^
     File 
"/home/airflow/.local/lib/python3.11/site-packages/kubernetes/client/rest.py", 
line 238, in request
       raise ApiException(http_resp=r)
   kubernetes.client.exceptions.ApiException: (403)
   Reason: Forbidden
   HTTP response headers: HTTPHeaderDict({'Audit-Id': 
'0e63b26a-4ad2-4baf-8bbb-26f4c0c1876b', 'Cache-Control': 'no-cache, private', 
'Content-Type': 'application/json', 'X-Content-Type-Options': 'nosniff', 
'X-Kubernetes-Pf-Flowschema-Uid': '05f64062-139b-4118-9727-4804f796adbe', 
'X-Kubernetes-Pf-Prioritylevel-Uid': 'f6addaaf-d023-4008-b9a5-bd8507e0f00c', 
'Date': 'Tue, 18 Feb 2025 09:06:06 GMT', 'Content-Length': '266'})
   HTTP response body: 
{"kind":"Status","apiVersion":"v1","metadata":{},"status":"Failure","message":"pods
 is forbidden: User \"system:anonymous\" cannot list resource \"pods\" in API 
group \"\" in the namespace 
\"airflow-idti\"","reason":"Forbidden","details":{"kind":"pods"},"code":403}
   
   ```
   
   
   ### Operating System
   
   "Debian GNU/Linux 12 (bookworm)"
   
   ### Versions of Apache Airflow Providers
   
   PRETTY_NAME="Debian GNU/Linux 12 (bookworm)"
   NAME="Debian GNU/Linux"
   VERSION_ID="12"
   VERSION="12 (bookworm)"
   VERSION_CODENAME=bookworm
   ID=debian
   HOME_URL="https://www.debian.org/";
   SUPPORT_URL="https://www.debian.org/support";
   BUG_REPORT_URL="https://bugs.debian.org/";
   
   
   ### Deployment
   
   Official Apache Airflow Helm Chart
   
   ### Deployment details
   
   I used the default values but with some custom values to add some configmaps 
   
   ### Anything else?
   
   Thanks in advance, I think it is a bug, if not I can move to other place 
   
   ### Are you willing to submit PR?
   
   - [ ] Yes I am willing to submit a PR!
   
   ### Code of Conduct
   
   - [x] I agree to follow this project's [Code of 
Conduct](https://github.com/apache/airflow/blob/main/CODE_OF_CONDUCT.md)
   


-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: [email protected]

For queries about this service, please contact Infrastructure at:
[email protected]

Reply via email to