Acho que descobri uma solução (usando uma implantação e um serviço).
Para minha implantação, usei dois contêineres (webapp + redis) em um Pod, pois não faz sentido que um webapp seja executado sem uma instância redis ativa e, além disso, ele se conecta ao redis na inicialização do aplicativo. Posso estar errado nesse raciocínio, então sinta-se à vontade para me corrigir se achar o contrário.
Segue minha implantação:
apiVersion: apps/v1
kind: Deployment
metadata:
name: my-app-deployment
spec:
selector:
matchLabels:
app: my-app-deployment
template:
metadata:
labels:
app: my-app-deployment
spec:
containers:
- name: redis
image: redis:latest
ports:
- containerPort: 6379
volumeMounts:
- mountPath: /srv/www
name: redis-storage
- name: my-app
image: my-app:latest
imagePullPolicy: Never
ports:
- containerPort: 8080
volumes:
- name: redis-storage
emptyDir: {}
E aqui está a definição de serviço:
apiVersion: v1
kind: Service
metadata:
name: my-app-service
spec:
ports:
- port: 8080
protocol: TCP
type: NodePort
selector:
app: my-app-deployment
Eu crio a implantação com:
kubectl create -f deployment.yaml
Em seguida, crio o serviço com kubectl create -f service.yaml
Eu li o IP com minikube ip
e extraia a porta da saída de kubectl describe service my-app-service
.