Доступ до Kubernetes Pod і Service за допомогою curl

pic

Фото від Growtika на Unsplash

При роботі з Kubernetes часто доводиться відкривати ваші додатки за допомогою Service і взаємодіяти з ними за допомогою інструментів, таких як curl. Ця стаття пояснює, як використовувати curl для взаємодії з Pod і Service, на практичному прикладі налаштування.

Приклад конфігурації Kubernetes YAML

Нижче наведено приклад конфігурації для Pod і Service:

Визначення Pod

apiVersion: v1  
kind: Pod  
metadata:  
 creationTimestamp: null  
 labels:  
 project: plt-6cc-api  
 name: project-plt-6cc-api  
spec:  
 containers:  
 - image: nginx:1.17.3-alpine  
 name: project-plt-6cc-api  
 resources: {}  
 dnsPolicy: ClusterFirst  
 restartPolicy: Always  
status: {}

Визначення Service

apiVersion: v1  
kind: Service  
metadata:  
 creationTimestamp: null  
 labels:  
 project: plt-6cc-api  
 name: project-plt-6cc-svc  
 namespace: pluto  
spec:  
 ports:  
 - port: 3333  
 protocol: TCP  
 targetPort: 80  
 selector:  
 project: plt-6cc-api  
status:  
 loadBalancer: {}

Розуміння налаштувань

  • Ім’я Pod: project-plt-6cc-api запускає сервер NGINX за допомогою образу nginx:1.17.3-alpine.
  • Ім’я Service: project-plt-6cc-svc відкриває Pod на порту 3333 (маповано на контейнерний порт 80).
  • Namespace: pluto.
  • Selector: Service націлений на Pod з міткою project: plt-6cc-api.

Service діє як абстракція для відкриття Pod, тому зазвичай ви будете використовувати ім’я та порт Service для доступу до додатку.

Крок 1: Перевірка Pod і Service

Перед використанням curl, переконайтеся, що Pod і Service працюють:

kubectl get pods -n pluto  
kubectl get svc -n pluto

Переконайтеся, що статус Pod Running і що Service правильно налаштований.

Крок 2: Використання curl всередині кластера

Оскільки це ClusterIP Service (тип за замовчуванням), він доступний тільки зсередини Kubernetes кластера.

Доступ до Service всередині кластера

  1. Використовуйте kubectl exec, щоб відкрити оболонку в Pod:
kubectl exec -it project-plt-6cc-api -n pluto -- /bin/sh
  1. Всередині Pod використовуйте curl для доступу до Service:
curl project-plt-6cc-svc.pluto.svc.cluster.local:3333

Тут:

  • project-plt-6cc-svc.pluto.svc.cluster.local — це повне доменне ім’я (FQDN) Service.
  • 3333 — це порт Service.

Якщо все налаштовано правильно, ви повинні отримати стандартну HTML сторінку NGINX.

Крок 3: Використання curl ззовні кластера

Якщо ви хочете отримати доступ до Service з вашого локального комп’ютера (ззовні кластера), потрібно відкрити його для зовнішнього доступу.

Опція 1: Використання Port Forwarding

Port forwarding тимчасово відображає порт Service на вашому локальному комп'ютері.

  1. Виконайте наступну команду:
kubectl port-forward svc/project-plt-6cc-svc 3333:3333 -n pluto
  1. На вашому локальному комп'ютері використовуйте curl:

Це перенаправить запити з localhost:3333 до Service всередині кластера.

Опція 2: Зміна типу Service на NodePort

Інша опція — відкрити Service через NodePort.

  1. Змініть визначення Service, додавши type: NodePort:
spec:  
 type: NodePort  
 ports:  
 - port: 3333  
 protocol: TCP  
 targetPort: 80  
 nodePort: 30080 # Відкриває Service на цей порт
  1. Застосуйте оновлену Service:
kubectl apply -f service.yaml
  1. Знайдіть зовнішній IP одного з вузлів:
kubectl get nodes -o wide
  1. Використовуйте curl для доступу до Service:
curl :30080

Замініть `` на зовнішній IP вузла кластера.

Крок 4: Усунення неполадок

Якщо curl не працює, перевірте наступне:

  1. Service Selector: Переконайтеся, що selector Service збігається з мітками Pod:
selector:  
 project: plt-6cc-api
  1. Логи Pod: Перевірте логи Pod на наявність помилок:
kubectl logs project-plt-6cc-api -n pluto

3.
Мережеві політики: Якщо застосовуються мережеві політики, переконайтеся, що вони дозволяють трафік до Pod.

Висновок

Використання curl для взаємодії з Kubernetes Pod і Service є основною навичкою для налагодження та тестування. Дотримуючись цих кроків, ви зможете отримати доступ до додатків, що працюють у вашому кластері, як зсередини, так і ззовні кластера. Незалежно від того, чи використовуєте ви port forwarding, NodePort або DNS-імена Service, Kubernetes надає гнучкі способи відкривати та тестувати ваші додатки.

Перекладено з: Accessing a Kubernetes Pod and Service Using curl

Leave a Reply

Your email address will not be published. Required fields are marked *