Kubernetes, доступ к IP вне кластера - PullRequest
1 голос
/ 15 апреля 2020

У меня есть корпоративная сеть (10.22. . ), в которой размещен кластер Kubernetes (10.225.0.1). Как я могу получить доступ к некоторой виртуальной машине в той же сети, но за пределами кластера, внутри модуля в кластере?

Например, у меня есть виртуальная машина с IP 10.22.0.1:30000, к которой мне нужно получить доступ с Стручок в кластере Кубернетес. Я пытался создать Сервис как этот

apiVersion: v1
kind: Service
metadata:
  name: vm-ip
spec:
  selector:
    app: vm-ip
  ports:
    - name: vm
      protocol: TCP
      port: 30000
      targetPort: 30000
  externalIPs:
    - 10.22.0.1

Но когда я делаю "curl http://vm-ip: 30000 " из Pod (kubectl exe c -it), он возвращает ошибка "отказано в соединении". Но это работает с "google.com". Каковы способы доступа к внешним IP-адресам?

1 Ответ

2 голосов
/ 15 апреля 2020

Для этого вы можете создать конечную точку .

Давайте go на примере:

В этом примере у меня в сети есть http-сервер с IP 10.128.15.209, и я хочу, чтобы он был доступен из моих модулей в моем Kubernetes Кластер.

Прежде всего, нужно создать конечную точку. Это позволит мне создать службу, указывающую на эту конечную точку, которая будет перенаправлять трафик c на мой внешний http-сервер.

Мой манифест конечной точки выглядит следующим образом:

apiVersion: v1
kind: Endpoints
metadata:
  name: http-server
subsets:
  - addresses:
      - ip: 10.128.15.209
    ports:
      - port: 80
$ kubectl apply -f http-server-endpoint.yaml
endpoints/http-server configured

Давайте создадим наш сервис:

apiVersion: v1
kind: Service
metadata:
  name: http-server
spec:
  ports:
    - port: 80
      targetPort: 80
$ kubectl apply -f http-server-service.yaml
service/http-server created

Проверка, существует ли наш сервис, и сохраните это clusterIP для использования букв:

user@minikube-server:~$$ kubectl get service
NAME          TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)   AGE
http-server   ClusterIP   10.96.228.220   <none>        80/TCP    30m
kubernetes    ClusterIP   10.96.0.1       <none>        443/TCP   10d

Теперь пришло время проверить, можем ли мы получить доступ к нашему сервису из модуля:

$ kubectl run ubuntu -it --rm=true --restart=Never --image=ubuntu bash

Эта команда создаст и откроет сеанс bash внутри модуля Ubuntu.

В моем случае я установлю curl, чтобы проверить, могу ли я получить доступ к своему http-серверу. Вам может потребоваться установить mysql:

root@ubuntu:/# apt update; apt install -y curl

Проверка соединения с моей службой с помощью clusterIP:

root@ubuntu:/# curl 10.128.15.209:80
Hello World!

И, наконец, с использованием имени службы (DNS):

root@ubuntu:/# curl http-server
Hello World!

Итак, в вашем конкретном c случае вы должны создать это:

apiVersion: v1
kind: Endpoints
metadata:
  name: vm-server
subsets:
  - addresses:
      - ip: 10.22.0.1
    ports:
      - port: 30000
---
apiVersion: v1
kind: Service
metadata:
  name: vm-server
spec:
  ports:
    - port: 30000
      targetPort: 30000
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...