Je souhaite déployer le serveur Apache sur OpenShift. Mon serveur fonctionne bien sur mon local, mais lorsque je le déploie sur OpenShift, je rencontre le problème suivant
(13) Autorisation refusée: AH00072: make_sock: impossible de se lier à l'adresse [::]: 80 (13) Autorisation refusée: AH00072: make_sock: impossible de se lier à l'adresse 0.0.0.0:80
La raison possible pourrait être qu'apache s'exécute en tant qu'utilisateur root, et openshift ne le permet pas!
Quelqu'un peut-il m'aider?
3 Réponses :
Essayez la configuration suivante, reportez-vous à Activer les images de conteneur nécessitant une racine pour plus de détails.
Si vous exécutez votre pod httpd en tant que default
serviceaccount
, vous pouvez accorder anyuid
scc pour fonctionner en tant que Utilisateur root
. Vous devez redémarrer votre pod pour que vos modifications prennent effet.
--- haproxy is already running with 80 port on the host. # ss -ntlpo | grep -w :80 LISTEN 0 128 *:80 *:* users:(("haproxy",pid=22603,fd=6)) --- Create a project for testing # oc new-project httpd-test --- Create a httpd pod # oc new-app --name httpd24 --docker-image=docker.io/httpd --- Check the state of the pod # oc get pod NAME READY STATUS RESTARTS AGE httpd24-1-hhp6g 0/1 CrashLoopBackOff 8 19m # oc logs httpd24-1-hhp6g AH00558: httpd: Could not reliably determine the server's fully qualified domain name, using 10.128.1.201. Set the 'ServerName' directive globally to suppress this message (13)Permission denied: AH00072: make_sock: could not bind to address [::]:80 (13)Permission denied: AH00072: make_sock: could not bind to address 0.0.0.0:80 no listening sockets available, shutting down AH00015: Unable to open logs --- Configure "anyuid" for running the httpd pod with 80 port # oc get pod httpd24-1-hhp6g -o yaml | grep -wi serviceaccountname serviceAccountName: default # oc adm policy add-scc-to-user anyuid -z default scc "anyuid" added to: ["system:serviceaccount:httpd-test:default"] # oc delete pod httpd24-1-hhp6g pod "httpd24-1-hhp6g" deleted --- Check the state of httpd pod again # oc get pod NAME READY STATUS RESTARTS AGE httpd24-1-9djkv 1/1 Running 0 1m # oc logs httpd24-1-9djkv AH00558: httpd: Could not reliably determine the server's fully qualified domain name, using 10.128.1.202. Set the 'ServerName' directive globally to suppress this message AH00558: httpd: Could not reliably determine the server's fully qualified domain name, using 10.128.1.202. Set the 'ServerName' directive globally to suppress this message [Mon May 06 12:10:47.487909 2019] [mpm_event:notice] [pid 1:tid 139699524075584] AH00489: Apache/2.4.39 (Unix) configured -- resuming normal operations [Mon May 06 12:10:47.488232 2019] [core:notice] [pid 1:tid 139699524075584] AH00094: Command line: 'httpd -D FOREGROUND'
UPDATE : Fondamentalement, le port 80 ne sera pas dupliqué avec le port de l'hôte 80 à moins d'être exécuté avec hostnetwork scc. Parce que le conteneur est isolé avec le réseau hôte en utilisant la fonctionnalité d'espaces de noms du noyau.
Mes preuves de test sont les suivantes.
# oc get pod <your pod name> -o yaml | grep -i serviceAccountName serviceAccountName: default # oc adm policy add-scc-to-user anyuid -z default # oc delete pod <your pod name>
J'espère que cela vous aidera.
Cela fonctionnera en général, mais échouera dans le cas où le routeur OpenShift (HAProxy) s'y lie déjà sur le nœud. Les ports hauts 8080/8443 sont plus sûrs - voir Image OpenShift Apache dans le catalogue.
Salut ! J'ai le serveur Apache en cours d'exécution sur mon docker. Mais quand je le déploie en openshift, cela me donne l'erreur "Action '-D FOREGROUND' failed". Quelle pourrait être la manière possible de démarrer le serveur Apache. La commande de démarrage simple ne fonctionne pas, car Apache est détaché du shell
@Milde Merci pour votre point, je suis également d'accord avec votre suggestion de ne pas utiliser 80 ports. Mais fondamentalement, je pense qu'un conteneur n'affecte pas l'utilisation du port avec l'hôte en cours d'exécution. Regardez au-dessus de ma section UPDATE
.
@Daein Park: oui, HAProxy (routeur OCP par défaut) utilise le Node IP (hostnetwork) pour acheminer le trafic, donc cela affecte et va planter / bloquer.
Le port 80 est un port réservé et OpenShift par défaut Les contraintes de contexte de sécurité ne permettent pas aux conteneurs de s'exécuter sur ce port.
Vous devez utiliser une image de conteneur qui s'exécute sur un port tel que 8080 ou 8443.
Salut ! J'ai le serveur Apache en cours d'exécution sur mon docker. Mais quand je le déploie en openshift, cela me donne l'erreur "Action '-D FOREGROUND' failed". Quelle pourrait être la manière possible de démarrer le serveur Apache. La commande de démarrage simple ne fonctionne pas, car Apache est détaché du shell
Le post suivant de Stack Overflow semble résoudre ce problème: Action '-D FOREGROUND' a échoué. lors de la création d'une image apache2 avec docker
Je vous encourage à utiliser les images existantes pour le serveur Apache basées sur rhel7
registry.redhat.io/rhscl/httpd-24-rhel7
Ces images prennent en charge S2I, exposent le port 8080 et peuvent fonctionner avec n'importe quel UID (pas root). Vous pouvez utiliser le modèle suivant: Modèle HTTPD
MODIFIER: J'ai mis à jour le lien vers le bon modèle.
Salut Ruben! J'ai le serveur Apache en cours d'exécution sur mon docker. Mais quand je le déploie en openshift, cela me donne l'erreur "Action '-D FOREGROUND' failed". Quelle pourrait être la manière possible de démarrer le serveur Apache. La commande de démarrage simple ne fonctionne pas, car Apache est détaché du shell.
Vous n'avez pas besoin de le démarrer détaché, pourquoi le feriez-vous?
Je ne veux pas qu'il commence à se détacher. Je veux juste l'exécuter sur OpenShift. Bien que openshift donne une erreur avec la commande FOREGROUND.
Il semble que vous n'ayez pas besoin d'un espace vide entre -DFOREGROUND
Le lien que vous avez fourni n'est pas valide.
@ LuísdeSousa ce n'est pas un lien http, c'est la référence d'image vers le registre de conteneurs. $ podman pull registry.redhat.io/rhscl/httpd-24-rhel7
Vous devez d'abord vous authentifier auprès du registre
À cette fin, je vois un lien vers un modèle json qui n'est pas valide.
@ LuísdeSousa J'ai mis à jour le lien vers le modèle