Implementando a solução alternativa para o redirecionamento http-> https ausente no ingress-gce com GLBC
Estou tentando entender as soluções alternativas sugeridas pela falta de redirecionamento HTTP-> HTTPS interno no ingress-gce, usando GLBC. O que estou enfrentando é como usar esse back-end personalizado, sugerido como uma opção para superar essa limitação (por exemplo, emComo forçar o SSL para o Kubernetes Ingress no GKE)
No meu caso, o aplicativo por trás do balanceador de carga não possui apache ou nginx, e não consigo descobrir como incluir, por exemplo. apache (que eu sei melhor do que o nginx) na instalação. Devo definir o apache na frente do aplicativo como proxy? Nesse caso, pergunto-me o que colocar na configuração do proxy, pois não se pode usar esses nomes de serviço convenientes do k8s lá ...
Ou o apache deve ser configurado como um tipo de back-end separado, que só obteria tráfego quando o cliente usar HTTP simples? Nesse caso, sinto falta da separação de back-end por protocolo no balanceador de carga GCE e, embora eu possa ver como isso pode ser feito manualmente, a entrada precisa ser configurada para isso, e não consigo encontrar nenhum recurso explicando como realmente fazer isso.
Por exemplo, emhttps://github.com/kubernetes/ingress-gce#redirecting-http-to-https o "aplicativo" cuida do anterior (parece ser construído no nginx) e, embora esse exemplo funcione perfeitamente, não é possível fazer a mesma coisa com o aplicativo de que estou falando.
Basicamente, minha configuração atualmente é esta:
http://<public ip>:80 -\
> GCE LB -> K8s pod running the application
https://<public_ip>:443 -/ (ingress-gce)
Eu sei que poderia bloquear completamente o HTTP, mas isso arruinaria a experiência do usuário quando alguém digitasse o nome de domínio no navegador.
Atualmente, tenho esses serviços configurados para o LB:
kind: Service
apiVersion: v1
metadata:
name: myapp
spec:
type: LoadBalancer
ports:
- name: http
port: 80
targetPort: myapp
protocol: TCP
selector:
app: myapp
---
kind: Ingress
apiVersion: extensions/v1beta1
metadata:
name: myapp-ingress
annotations:
ingress.kubernetes.io/rewrite-target: /
kubernetes.io/ingress.global-static-ip-name: "my-ip"
ingress.gcp.kubernetes.io/pre-shared-cert: "my-cert"
spec:
backend:
serviceName: myapp
servicePort: 80
rules:
- host: my.domain.name
http:
paths:
- path: /
backend:
serviceName: myapp
servicePort: 80
Além disso, eu tenho o GLBC empacotado junto com a implantação do aplicativo:
apiVersion: v1
kind: ConfigMap
metadata:
name: glbc-configmap
data:
gce.conf: |
[global]
node-tags = myapp-k8s-nodepool
node-instance-prefix = gke-myapp-k8s-cluster
---
kind: Deployment
apiVersion: apps/v1beta2
metadata:
name: myapp
spec:
replicas: 1
selector:
matchLabels:
app: myapp
template:
metadata:
name: myapp
labels:
app: myapp
spec:
containers:
# START application container
- name: myapp
image: eu.gcr.io/myproject/myapp:latest
imagePullPolicy: Always
readinessProbe:
httpGet:
path: /ping
port: 8080
ports:
- name: myapp
containerPort: 8080
# END application container
# START GLBC container
- name: myapp-glbc
image: gcr.io/google_containers/glbc:0.9.7
livenessProbe:
httpGet:
path: /ping
port: 8080
scheme: HTTP
initialDelaySeconds: 30
timeoutSeconds: 5
volumeMounts:
- mountPath: /etc/glbc-configmap
name: cloudconfig
readOnly: true
args:
- --apiserver-host=http://localhost:8080
- --default-backend-service=myapp
- --sync-period=300s
- --config-file-path=/etc/glbc-configmap/gce.conf
Eu gostaria muito de receber dicas, além de soluções mais completas.