Muhammad Nauman
10/30/2025, 9:13 AMglobal:
workloads:
containerOrchestrator:
secretName: "airbyte-gcs-logs-creds"
secretMountPath: "/secrets/gcs-log-creds"
and https://github.com/airbytehq/airbyte/commit/09ebba016695c3b15e06924bc43c019a430c83f1 for correct identifier but still unable to make it work, and this is the output from the container
kubectl exec -it airbyte-workload-api-server-594597677d-pf4jz -n airbytev2 -- bash
[airbyte@airbyte-workload-api-server-594597677d-pf4jz app]$ ls -l /secrets/gcs-log-creds
total 0
drwxrwsrwt 3 root airbyte 100 Oct 30 08:00 gcp.json
[airbyte@airbyte-workload-api-server-594597677d-pf4jz app]$ head -n 5 /secrets/gcs-log-creds/gcp.json
head: error reading '/secrets/gcs-log-creds/gcp.json': Is a directory
Could any one had or have the same issue or solved it, could guide on this :-)kapa.ai
10/30/2025, 9:13 AMls -l /secrets/gcs-log-creds total 0 drwxrwsrwt 3 root airbyte 100 Oct 30 08:00 gcp.json head: error reading '/secrets/gcs-log-creds/gcp.json': Is a directory ### What’s Happening? This issue typically occurs when the Kubernetes secret is created incorrectly—specifically, if the key in the secret is named gcp.json but the value is not the actual JSON file content, or if the secret is structured such that gcp.json is a directory rather than a file. ### Key Points from Knowledge Sources - The Airbyte Helm chart expects the GCS credentials to be provided as a file named gcp.json inside a Kubernetes secret, and this file should contain the service account JSON key, not a directory or a base64-encoded directory structure [[source]](https://docs.airbyte.com/platform/next/deploying-airbyte/integrations/storage#values). - There have been several issues reported about secrets being double base64 encoded or misconfigured, leading to similar mounting problems [[source]](https://github.com/airbytehq/airbyte/issues/68178). - The correct way is to create a Kubernetes secret where the key is gcp.json and the value is the raw JSON content of your service account key (not base64-encoded, as kubectl will handle encoding) [[source]](https://docs.airbyte.com/platform/next/deploying-airbyte/integrations/storage#values). ### How to Fix 1. Check Your Secret Creation Command When creating the secret, use: sh kubectl create secret generic airbyte-gcs-log-creds \ --from-file=gcp.json=/path/to/your/service-account.json \ -n airbytev2 This ensures that /secrets/gcs-log-creds/gcp.json is a file containing your credentials. 2. Verify the Secret in Kubernetes After creating the secret, check it: sh kubectl get secret airbyte-gcs-log-creds -n airbytev2 -o yaml You should see a gcp.json key with a base64-encoded value (the content of your JSON file). 3. Helm Values In your values.yaml, ensure you reference the secret correctly: yaml global: storage: type: "GCS" storageSecretName: airbyte-gcs-log-creds bucket: log: your-bucket state: your-bucket workloadOutput: your-bucket gcs: projectId: your-project-id credentialsPath: /secrets/gcs-log-creds/gcp.json (Use storageSecretName as the key, not secretName, as per recent chart versions and documentation [[source]](https://github.com/airbytehq/airbyte/issues/44525).) 4. Remove Double Encoding Do not manually base64-encode the JSON file before creating the secret with --from-file. Let kubectl handle the encoding. ### Additional Notes - If you previously created the secret with --from-literal or by manually encoding, delete and recreate it using --from-file. - If you are using a different secret name or mount path, ensure all references in your Helm values and environment variables are consistent. ### References - [Helm GCS Storage Configuration](https://docs.airbyte.com/platform/next/deploying-airbyte/integrations/storage#values) - [Github Issue: GCS secret mounting problems](https://github.com/airbytehq/airbyte/issues/68178) - [Github Issue: Correct secret key is storageSecretName](https://github.com/airbytehq/airbyte/issues/44525) If you follow these steps and still encounter issues, please share the output of your secret definition (kubectl get secret ... -o yaml) and your relevant values.yaml section for further troubleshooting.Muhammad Nauman
10/30/2025, 9:20 AMkapa.ai
10/30/2025, 9:20 AMkapa.ai
10/30/2025, 9:21 AMyaml apiVersion: v1 data: gcp.json: <base64-encoded-json> kind: Secret metadata: name: gcs-log-creds namespace: airbytev2 type: Opaque - The value for gcp.json should be the base64-encoded content of your GCP service account JSON file. - If you created the secret with kubectl create secret generic gcs-log-creds --from-file=gcp.json=/path/to/your/service-account.json -n airbytev2, this is correct and will work as expected [[Deploying Airbyte: Storage Values]](https://docs.airbyte.com/platform/next/deploying-airbyte/integrations/storage#values). ### 2. Helm Values Your values.yaml should use: yaml storage: storageSecretName: gcs-log-creds type: gcs bucket: log: airbyte-bucket state: airbyte-bucket workloadOutput: airbyte-bucket activityPayload: airbyte-bucket gcs: projectId: brk-analytics credentialsJsonPath: /secrets/gcs-log-creds/gcp.json - Use storageSecretName (not secretName) as the key. This is confirmed in both the documentation and user feedback on recent chart versions [[Github Issue: storageSecretName vs secretName]](https://github.com/airbytehq/airbyte/issues/44525). - The type should be lowercase: gcs. - credentialsJsonPath is the correct field to use if you are mounting the secret as a file [[Deploying Airbyte: Storage Values]](https://docs.airbyte.com/platform/next/deploying-airbyte/integrations/storage#values). ### 3. Common Pitfalls - Do not set both credentialsJson and credentialsJsonPath at the same time. Use only one. - The secret must be mounted as a file, not a directory. If you see /secrets/gcs-log-creds/gcp.json as a directory, your secret was likely created incorrectly (e.g., with a directory as the source instead of a file). - The secret name in your Helm values (storageSecretName) must match the actual Kubernetes secret name. ### 4. Troubleshooting If you still see /secrets/gcs-log-creds/gcp.json as a directory, double-check how you created the secret. It should be: sh kubectl create secret generic gcs-log-creds --from-file=gcp.json=/path/to/your/service-account.json -n airbytev2 Do not use --from-file=gcp.json=/path/to/directory or --from-file=/path/to/directory as this will create a directory structure in the secret. ### 5. Documentation References - The official documentation and recent issues confirm this is the correct approach for Airbyte Helm v2 and GCS logging [[Deploying Airbyte: Storage Values]](https://docs.airbyte.com/platform/next/deploying-airbyte/integrations/storage#values), [[Github Issue: storageSecretName vs secretName]](https://github.com/airbytehq/airbyte/issues/44525). --- Summary: Your configuration is correct if the secret is created from a single file and referenced by storageSecretName in your Helm values. If you still encounter issues, re-create the secret using the exact command above and ensure the file path is correct. If /secrets/gcs-log-creds/gcp.json is still a directory, the secret was not created from a single file.