When we were using docker-compose, we could map multiple aliases to one container/service via links. For example, bucket1.s3 and bucket2.s3 are aliases for container s3. Now as we are moving to kubernetes, I'm trying to do the same and link containers using service discovery.
What I can think of right now is to have one service for each bucket and each service will point to the same pod. This seems a lot of work. Is there way to make multiple DNS mapped to one service so bucket1.s3.namespace.svc.cluster.local and bucket2.s3.namespace.svc.cluster.local can both be resolved to s3 service?
I believe what you might want is one service mapped to two deployments, you could have two deployments with names bucket1 and bucket2 and have them labeled with one label app: buckets then have a service with a selector including that label.
apiVersion: apps/v1
kind: Deployment
metadata:
name: bucket1
labels:
app: buckets
spec:
replicas: 3
selector:
matchLabels:
app: buckets
template:
metadata:
labels:
app: buckets
spec:
containers:
- name: bucket-container
image: bucketimage
ports:
- containerPort: 80apiVersion: apps/v1
kind: Deployment
metadata:
name: bucket2
labels:
app: buckets
spec:
replicas: 3
selector:
matchLabels:
app: buckets
template:
metadata:
labels:
app: buckets
spec:
containers:
- name: bucket-container
image: bucketimage
ports:
- containerPort: 80kind: Service
apiVersion: v1
metadata:
name: s3
spec:
selector:
app: buckets
ports:
- protocol: TCP
port: 80But a further question would be why would you want to have that? if both bucket1 and bucket2 contain different information/data.
With Kubernetes generally, you would have one deployment with multiple pods/replicas to serve data either in bucket1 or bucket2 assuming the data is the same. If the data is different why not have 2 deployments with different DNS entries.
If you are using K8s 1.11 or later, you can also tweak the coredns ConfigMap in the kube-system namespace to possibly get what you are trying to get to but in terms of DNS you can't have a single record map to two CNAMEs as per RFC 1034, Section 3.6.2. You can't also hardcode IPs in Kubernetes since your IPs always change when your pods get created/removed.