Tengo una aplicación ASP.NET Core que quiero configurar con HTTPS en mi clustur de kubernetes local usando minikube.
El archivo yaml de implementación es:
apiVersion: apps/v1 kind: Deployment metadata: name: kube-volume labels: app: kube-volume-app spec: replicas: 1 selector: matchLabels: component: web template: metadata: labels: component: web spec: containers: - name: ckubevolume image: kubevolume imagePullPolicy: Never ports: - containerPort: 80 - containerPort: 443 env: - name: ASPNETCORE_ENVIRONMENT value: Development - name: ASPNETCORE_URLS value: https://+:443;http://+:80 - name: ASPNETCORE_HTTPS_PORT value: '443' - name: ASPNETCORE_Kestrel__Certificates__Default__Password value: mypass123 - name: ASPNETCORE_Kestrel__Certificates__Default__Path value: /app/https/aspnetapp.pfx volumeMounts: - name: ssl mountPath: "/app/https" volumes: - name: ssl configMap: name: game-configPuede ver que he agregado variables de entorno para https en el archivo yaml.
También creé un servicio para esta implementación. El archivo yaml del servicio es:
apiVersion: v1 kind: Service metadata: name: service-1 spec: type: NodePort selector: component: web ports: - name: http protocol: TCP port: 100 targetPort: 80 - name: https protocol: TCP port: 200 targetPort: 443Pero, lamentablemente, el servicio no abre la aplicación cuando ejecuto el comando minikube service service-1 .
Sin embargo, cuando elimino las variables env para https, el servicio abre la aplicación. Estas son las líneas que cuando elimino la aplicación se abren:
- name: ASPNETCORE_URLS value: https://+:443;http://+:80 - name: ASPNETCORE_HTTPS_PORT value: '443' - name: ASPNETCORE_Kestrel__Certificates__Default__Password value: mypass123 - name: ASPNETCORE_Kestrel__Certificates__Default__Path value: /app/https/aspnetapp.pfxTambién confirmé con el shell que el certificado está presente en la carpeta /app/https.
¿Por qué estoy haciendo mal?
Creo que su enfoque no encaja bien con la arquitectura de Kubernetes. Un certificado TLS (para https) se acopla a un nombre de host.
Recomendaría uno de dos enfoques diferentes:
type: LoadBalancerEsto generalmente se denomina Network LoadBalancer, ya que expone su aplicación para TCP o UDP directamente.
Consulte Acceso a LoadBalancer en la documentación de Minikube. Pero tenga cuidado de que su aplicación obtenga una dirección externa de su LoadBalancer, y su certificado TLS probablemente tenga que coincidir con eso.
Este es el enfoque más común para Microservicios en Kubernetes. Además de su Servicio de type: NodePort , también necesita crear un recurso de Ingress para su aplicación.
El clúster necesita un controlador Ingress y la puerta de enlace manejará su certificado TLS, en lugar de su aplicación.
Consulte Cómo usar el certificado TLS personalizado con el complemento de ingreso para saber cómo configurar el certificado de ingreso y TLS en Minikube.
Recomendaría ir por esta ruta.