Cuando la curvatura se realiza dentro del módulo en el puerto 80, la respuesta es correcta. Al llamar a curl fuera del contenedor a través del servicio Kubernetes en la IP de las máquinas y el puerto 30803, aparece esporádicamente "Conexión rechazada".
Configuración de la aplicación nginx:
server { listen 80; server_name 127.0.0.1; access_log /var/log/nginx/access.log; error_log /var/log/nginx/error.log; root /usr/share/nginx/html; index index.html; error_page 404 /404.html; location = /40x.html { } error_page 500 502 503 504 /50x.html; location = /50x.html { } }Despliegues de Kubernetes y manifiesto de servicio que se utiliza:
apiVersion: apps/v1 kind: Deployment metadata: name: web-app namespace: dev labels: environment: dev spec: selector: matchLabels: environment: dev replicas: 1 template: metadata: labels: environment: dev spec: containers: - name: web-app imagePullPolicy: Never image: web-app:$BUILD_ID ports: - containerPort: 80 readinessProbe: httpGet: path: / port: 80 periodSeconds: 5 --- apiVersion: v1 kind: Service metadata: name: web-app-dev-svc namespace: dev labels: environment: dev spec: selector: environment: dev type: NodePort ports: - name: http nodePort: 30803 port: 80 protocol: TCP targetPort: 80El problema era que 2 servicios en el selector usaban el mismo valor de etiqueta: 'environment: dev', y asumo que se provocó esta conexión aleatoria, porque estaba equilibrando entre un pod y otro. Valores de etiquetas fijos, ahora funciona perfectamente.
Cuando ejecuto K8s con un NodePort, no tengo ningún problema. Puede probar primero usando un proxy (reenvío de puerto) a su servicio y luego su pod para asegurarse de que todo funcione con el mismo comportamiento. Si hacer el reenvío de puerto a su pod directamente funciona sin ningún problema, entonces es posible que tenga un problema entre su servicio y el pod (por ejemplo, políticas de red como demasiadas llamadas en un corto período de tiempo).
Con respecto a mi configuración de nginx, es bastante simple:
# /usr/share/nginx/html # cat /etc/nginx/conf.d/default.conf server { listen 80; # Optional listen [::]:80; server_name localhost; # Default configuration location / { root /usr/share/nginx/html; index index.html index.htm; # Forward everything to the react router try_files $uri $uri/ /index.html?$args; } # If we wish some custom error page later, we could also add them. error_page 500 502 503 504 /50x.html; location = /50x.html { root /usr/share/nginx/html; } }De lo contrario, si desea probar con un nginx textual, simplemente use la imagen de nginx (consulte la hoja de referencia de kubernetes.io )
kubectl create deployment nginx --image=nginx kubectl create services nodeport nginx-svc --tcp 30666:80 # Nodeport should then be 30666 on the cluster