Обратите внимание, что service - это другое понятие в Docker, чем в K8s. Самый простой способ получить то, что вы хотите, это создать две капсулы; скажем pod-1
и pod-2
, с файлом yaml, похожим на этот:
apiVersion: v1
kind: Pod
metadata:
name: NAME
labels:
app: LABEL
spec:
containers:
- name: nginx
image: nginx
ports:
- containerPort: 80
Скажите, что NAME и LABEL - это nginx
и nginx-1
, так что теперь у вас есть два модуля с именами nginx
и nginx-1
с метками app: nginx
и app: nginx-1
. На самом деле, поскольку только один из них будет выставлен, другой ярлык не имеет значения.
Теперь вы можете открыть модуль либо с помощью файла yaml, либо из командной строки.
Файл Yaml:
apiVersion: v1
kind: Service
metadata:
name: server
spec:
ports:
- port: 80
targetPort: 80
protocol: TCP
name: http
selector:
app: nginx
Командная строка:
kubectl expose pod nginx --port 80 --name server
Если вы теперь обращаетесь ко второму модулю (nginx-1) и curl
напрямую к сервису, вы в конечном итоге нажмете на модуль за ним (nginx):
nerus:~/workspace $ kubectl exec -it nginx-1 bash
root@nginx-1:/# curl -I server
HTTP/1.1 200 OK