Minha configuração é esta: Azure AKS com gateway de aplicativo como entrada. Eu tenho um deploy.yml
e um service.yml
descrevendo meu serviço e tenho um segredo tls configurado corretamente.
O problema é que posso usar o portal do Azure para criar manualmente um ouvinte HTTPS com o segredo que criei e tudo funciona bem. Como sei que está funcionando corretamente? Eu uso curl com o protocolo https e obtenho o resultado desejado. Também olho para o log do pod e vejo a solicitação chegando corretamente.
No entanto , assim que atualizo uma implantação (usando kubectl apply -f deploy.yml
) todo o meu trabalho manual é redefinido e os ouvintes são recriados usando HTTP, e tenho que refazer todo o trabalho: criar um ouvinte HTTPS, mover as regras para o novo ouvinte etc.
Este é o meu ingress.yml
:
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: my-ingress
annotations:
kubernetes.io/ingress.class: azure/application-gateway
appgw.ingress.kubernetes.io/backend-path-prefix: "/"
appgw.ingress.kubernetes.io/ssl-redirect: "true"
spec:
tls:
- hosts:
- my.website.com
secretName: my-secret
rules:
- http:
paths:
- path: /api1/*
backend:
serviceName: my-first-svc
servicePort: 80
- path: /api2/*
backend:
serviceName: my-first-svc
servicePort: 8081
E este é o meu deploy.yml
:
apiVersion: apps/v1
kind: Deployment
metadata:
name: my-app
spec:
replicas: 1
selector:
matchLabels:
app: my-app
template:
metadata:
labels:
app: my-app
spec:
containers:
- name: my-pod
image: myuser/my-app:v10
ports:
- containerPort: 80
- containerPort: 6666
env:
- name: ConnectionStrings__DefaultConnection
valueFrom:
secretKeyRef:
name: app-secrets
key: connection-string
livenessProbe:
httpGet:
path: /api/values
port: 80
initialDelaySeconds: 10
periodSeconds: 10
O que estou fazendo errado? Obrigado
ATUALIZAÇÃO Encontrei a resposta, o problema é com o ingress.yml
arquivo, estava faltando uma host
entrada no primeiro spec.rules
objeto:
spec:
tls:
- hosts:
- my.website.com
secretName: my-secret
rules:
- host: my.website.com # <----- THIS WAS MISSING!
http:
paths:
- path: /api1/*
backend:
Estou postando a resposta do OP para melhor visibilidade: