Запуск kubectl в php shell_exec возвращает пустой список

#php #kubernetes #kubectl #fpm

Вопрос:

На моем сервере DO я пытаюсь запустить kubectl get deployments -o=json shell_exec , но он либо возвращает null , либо пустой список:

 {
    "apiVersion": "v1",
    "items": [],
    "kind": "List",
    "metadata": {
        "resourceVersion": "",
        "selfLink": ""
    }
}
 

Но когда я запускаю его локально, он работает:

 {
    "apiVersion": "v1",
    "items": [
        {
            "apiVersion": "apps/v1",
            "kind": "Deployment",
            "metadata": {
                "annotations": {
                    "deployment.kubernetes.io/revision": "1",
                    "kubectl.kubernetes.io/last-applied-configuration": "..."
                },
                "creationTimestamp": "2021-09-23T11:41:11Z",
                "generation": 1,
                "name": "database-1911797883",
                "namespace": "default",
                "resourceVersion": "...",
                "uid": "..."
            },
            "spec": {
                ...
                "replicas": 1,
                "revisionHistoryLimit": 10,
                "selector": {
                    "matchLabels": {
                        "app": "database-1911797883"
                    }
                },
                "template": {
                    "metadata": {
                        "creationTimestamp": null,
                        "labels": {
                            "app": "database-1911797883"
                        }
                    },
                    "spec": {
                        "containers": [
                            {
                                "image": "...",
                                "imagePullPolicy": "Always",
                                "name": "database-1911797883",
                                "resources": {},
                                "terminationMessagePath": "/dev/termination-log",
                                "terminationMessagePolicy": "File"
                            }
                        ],
                        "dnsPolicy": "ClusterFirst",
                        "restartPolicy": "Always",
                        "schedulerName": "default-scheduler",
                        "securityContext": {},
                        "terminationGracePeriodSeconds": 30
                    }
                }
            },
            "status": {
                "availableReplicas": 1,
                "conditions": [
                    ...
                ],
                "observedGeneration": 1,
                "readyReplicas": 1,
                "replicas": 1,
                "updatedReplicas": 1
            }
        }
    ],
    "kind": "List",
    "metadata": {
        "resourceVersion": "",
        "selfLink": ""
    }
}
 

Я знаю, что shell_exec это не отключено в php-fpm и kubectl config view выводит одни и те же значения в обоих shell_exec и cli.

Я настроил запуск php-fpm от имени того же пользователя, который выполняет команду через интерфейс командной строки.

Комментарии:

1. Попробуйте изменить команду на kubectl get deployments -n default -o json

Ответ №1:

Откройте свой /etc/php-fpm.d/www.conf (или любой conf другой файл, который у вас там есть, который вы используете для своего Интернета) и раскомментируйте clear_env = no .

Из документов:

  clear_env bool

    Clear environment in FPM workers. Prevents arbitrary environment
variables from reaching FPM worker processes by clearing the environment
in workers before env vars specified in this pool configuration are added.
Default value: Yes.
 

Следовательно, установка этого значения no позволит работникам использовать информацию об окружающей среде, ведущую к ожидаемому результату.