Поиск по сайту:

Как создать сервис в Kubernetes


На этой странице

  1. Предварительные условия
  2. Что мы будем делать
  3. Создание службы
  4. Заключение

Служба — это уровень абстракции над модулями. Он определяет логический набор модулей. Он предоставляет один IP-адрес и DNS-имя, по которым можно получить доступ к модулям. Он используется для раскрытия стручков.

В Kubernetes есть 3 разных типа сервисов:

  1. ClusterIP:
    предоставляет доступ к службе в кластере Kubernetes. Эта служба доступна только внутри кластера. Доступ к нему из-за пределов кластера невозможен.
  2. Порт узла:
    служба будет предоставляться через статический порт на развернутом узле. Доступ к этой службе можно получить извне кластера, используя NodeIP:Nodeport.
  3. Балансировщик нагрузки:
     предоставляет доступ к Службе извне с помощью балансировщика нагрузки облачного провайдера, что создает общедоступный IP-адрес для облачного провайдера.
  4. ExternalName:
    сопоставляет Службу с содержимым поля externalName, возвращая запись CNAME.


Нажмите здесь, чтобы узнать больше о сервисе Kubernetes.

В этой статье мы увидим шаги по созданию Serice типа NodePort.

Предпосылки

  1. Кластер Kubernetes с хотя бы 1 рабочим узлом.
    Если вы хотите научиться создавать кластер Kubernetes, нажмите здесь. Это руководство поможет вам создать кластер Kubernetes с 1 мастером и 2 узлами на инстансах AWS Ubuntu EC2.

Что мы будем делать

  1. Создание службы

Создать сервис

Во-первых, мы создадим развертывание, используя следующее определение, на которое сервис будет перенаправлять все поступающие к нему запросы.

Создайте новый файл и добавьте в него следующее содержимое, это создаст развертывание для Nginx.

vim my-deployment.yml
apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx
spec:
  strategy:
    type: Recreate
  selector:
    matchLabels:
      app: nginx
  replicas: 3 
  template: 
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: nginx
        image: nginx
        ports:
        - containerPort: 80

Чтобы создать развертывание, выполните следующую команду.

kubectl create -f my-deployment.yml

Это создаст развертывание для Nginx с 3 репликами.

Вы можете получить подробную информацию о развертывании, наборе реплик и поде, используя следующие команды.

kubectl get deployment | grep nginx
kubectl get replicaset | grep nginx
kubectl get pod | grep nginx

На приведенном выше снимке экрана вы можете видеть, что были созданы 3 реплики Nginx.

Теперь создайте определение службы, используя следующий контент.

vim my-service.yml
apiVersion: v1
kind: Service
metadata:
  name: nginx
  namespace: default
  labels:
    app: nginx
spec:
  externalTrafficPolicy: Local
  ports:
  - name: http
    port: 80
    protocol: TCP
    targetPort: 80
  selector:    
app: nginx type: NodePort

Приведенное выше определение службы создаст службу типа NodePort, используя пространство имен по умолчанию, и перенаправит запросы к поду, соответствующему метке nginx, т. е. к подам, которые мы создали на предыдущем этапе создания развертывания.

Выполните следующую команду, чтобы создать службу.

kubectl create -f my-service.yml

Получите подробную информацию о службе и проверьте NodePort, на котором будет доступна служба.

kubectl get service | grep nginx
kubectl describe service nginx

На приведенном выше снимке экрана видно, что Служба доступна на порту 30747. Это может отличаться для вас, поскольку порт назначается случайным образом из доступного диапазона.

Теперь к приложению nginx можно получить доступ через этот сервис на NodeIp:NodePort.

Вот он: 106.210.138.189:30747.

Заключение

В этой статье мы создали развертывание для Nginx с 3 репликами и создали службу типа NodePort. Мы увидели, как к приложению Nginx, созданному с помощью развертывания, можно получить доступ через NodeIP:Port.