Подтвердить что ты не робот

Minikube предоставляет MySQL, работающий на localhost как услугу

У меня версия minikube v0.17.1 работает на моей машине. Я хочу, чтобы имитировать среду, которую я буду иметь в AWS, где мой экземпляр MySQL будет за пределами моего кластера Kubernetes.

В принципе, как я могу открыть мой локальный экземпляр MySQL, запущенный на моей машине, в кластер Kubernetes, запущенный через minikube?

4b9b3361

Ответ 1

Kubernetes позволяет создавать службу без селектора, и кластер не будет создавать связанную конечную точку для этой службы, эта функция обычно используется для прокси устаревшего компонента или внешнего компонента.

  1. Создать сервис без селектора

    apiVersion: v1
    kind: Service
    metadata:
        name: my-service
    spec:
        ports:
            - protocol: TCP
              port: 1443
              targetPort: <YOUR_MYSQL_PORT>
    
  2. Создать относительный объект конечной точки

    apiVersion: v1
    kind: Endpoints
    metadata:
        name: my-service
    subsets:
        - addresses:
            - ip: <YOUR_MYSQL_ADDR>
          ports:
            - port: <YOUR_MYSQL_PORT>
    
  3. Получить сервисный IP

    $ kubectl get svc my-service
    NAME         CLUSTER-IP     EXTERNAL-IP   PORT(S)   AGE
    my-service   <SERVICE_IP>   <none>        1443/TCP    18m
    
  4. Доступ к вашему MYSQL из службы <SERVICE_IP>:1443 или my-service:1443

Ответ 2

Если вы хотите отобразить локальный порт на кластер Minikube, вы можете использовать kubectl port-forward как указано в документации Kubernetes.

Вот пример сопоставления 127.0.0.1:6379 со службой Redis на ip мини-куба на том же порту.

kubectl port-forward svc/redis-master 6379:6379

Ответ 3

Вариант 1 - использовать безголовый сервис без селекторов

Поскольку у этой службы нет селектора, соответствующий объект Endpoints не будет создан. Вы можете вручную сопоставить службу с вашими конкретными конечными точками (см. документ).

kind: Service
apiVersion: v1
metadata:
  name: my-service
spec:
  ports:
  - port: 80
    targetPort: 8080
---
kind: Endpoints
apiVersion: v1
metadata:
  name: my-service
subsets:
- addresses:
  - ip: 10.0.2.2
  ports:
  - port: 8080

Вариант 2 - использовать ExternalName сервис

kind: Service
apiVersion: v1
metadata:
  name: my-service
spec:
  type: ExternalName
  externalName: minikube.host

Единственное предостережение в том, что оно должно быть в состоянии разрешить minikube.host. Просто добавьте эту строку в файл etc/hosts.

10.0.2.2        minikube.host

ExternalName в настоящее время не поддерживает сопоставление портов.


Еще одно примечание: IP 10.0.2.2, как известно, работает только с Virtual Box (см. SO). Для xhyve попробуйте заменить его на 192.168.99.1 (см. GitHub Issue и Issue). Демо GitHub.