You don't need to split your manifests into multiple files. You can use a list:
apiVersion: v1
kind: List
items:
- apiVersion: extensions/v1beta1
kind: Deployment
...
- apiVersion: v1
kind: Service
...
- apiVersion: v1
kind: ConfigMap
...
Edit: Or YAML's "multiple document" syntax: apiVersion: extensions/v1beta1
kind: Deployment
...
---
apiVersion: v1
kind: Service
...
---
apiVersion: v1
kind: ConfigMap
...
Then you just use "kubectl apply -f myapp.yml" to create or update.Re ingress, I agree that it's probably the weakest point of Kubernetes at this point. It's particularly weak when it comes to internal load balancing. When you have lots of services that should only need to be available internally, you'll want to have an internal ingress; I don't know about AWS, but Google Cloud Platform's internal load balancer doesn't support pointing at Kubernetes [1]. I haven't found a better option than to run Traefik as a DaemonSet and rely on round-robin DNS (aka poor man's HA).