2
votes

Comment déployer le serveur Apache dans OpenShift?

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?


0 commentaires

3 Réponses :


0
votes

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.


4 commentaires

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.



1
votes

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.


2 commentaires

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



-1
votes

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.


8 commentaires

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