Фото від 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 всередині кластера
- Використовуйте
kubectl exec
, щоб відкрити оболонку в Pod:
kubectl exec -it project-plt-6cc-api -n pluto -- /bin/sh
- Всередині 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 на вашому локальному комп'ютері.
- Виконайте наступну команду:
kubectl port-forward svc/project-plt-6cc-svc 3333:3333 -n pluto
- На вашому локальному комп'ютері використовуйте
curl
:
Це перенаправить запити з localhost:3333
до Service всередині кластера.
Опція 2: Зміна типу Service на NodePort
Інша опція — відкрити Service через NodePort.
- Змініть визначення Service, додавши
type: NodePort
:
spec:
type: NodePort
ports:
- port: 3333
protocol: TCP
targetPort: 80
nodePort: 30080 # Відкриває Service на цей порт
- Застосуйте оновлену Service:
kubectl apply -f service.yaml
- Знайдіть зовнішній IP одного з вузлів:
kubectl get nodes -o wide
- Використовуйте
curl
для доступу до Service:
curl :30080
Замініть `` на зовнішній IP вузла кластера.
Крок 4: Усунення неполадок
Якщо curl
не працює, перевірте наступне:
- Service Selector: Переконайтеся, що
selector
Service збігається з мітками Pod:
selector:
project: plt-6cc-api
- Логи 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