Как я могу получить доступ к службам вне кластера, используя прокси-сервер kubectl?
Когда мы раскручиваем кластер с kubeadm в kubernetes, и сервис .yaml
файл выглядит так:
apiVersion: v1
kind: Service
metadata:
name: neo4j
labels:
app: neo4j
component: core
spec:
clusterIP: None
ports:
- port: 7474
targetPort: 7474
name: browser
- port: 6362
targetPort: 6362
name: backup
selector:
app: neo4j
component: core
После запуска всех модулей и служб kubectl proxy
и это говорит:
Starting to serve on 127.0.0.1:8001
Поэтому, когда я хочу получить доступ к этой услуге, как:
curl localhost:8001/api/
это просто достижимо внутри кластера! Как мне добраться до сервисов за пределами кластера?
1 ответ
Вы должны выставить свой сервис, используя NodePort:
apiVersion: v1
kind: Service
metadata:
name: neo4j
labels:
app: neo4j
component: core
spec:
externalTrafficPolicy: Local
type: NodePort
ports:
- port: 7474
targetPort: 7474
name: browser
- port: 6362
targetPort: 6362
name: backup
selector:
app: neo4j
component: core
Теперь, если вы описываете свой сервис с помощью
kubectl describe svc neo4j
Вы получите значение нодпорта, которое будет между 30000-32767, и вы можете получить доступ к своему сервису из-за пределов кластера, используя
curl http://<node_ip>:<node_port>
Надеюсь это поможет.
РЕДАКТИРОВАТЬ: Да, вы не можете напрямую использовать clusterIP: None
в случае выставления сервиса через NodePort. Сейчас clusterIP: None
означает, что внутренняя балансировка нагрузки не выполняется kubernetes и для этого мы также можем использовать externalTrafficPolicy=Local
в определении сервиса.
Кроме того, вы можете использовать вход для маршрутизации трафика к нужной службе.