Доступ к службе балансировки нагрузки Minikube с хост-машины

#kubernetes #load-balancing #minikube

#kubernetes #балансировка нагрузки #minikube

Вопрос:

Я пытаюсь научиться использовать Kibernetes с Minikube и выполнить следующее развертывание и сервис:

 ---
kind: Service
apiVersion: v1
metadata:
  name: exampleservice
spec:
  selector:
    app: myapp
  ports:
  - protocol: "TCP"
    # Port accessible inside cluster
    port: 8081
    # Port to forward to inside the pod
    targetPort: 8080
    # Port accessible outside cluster
    nodePort: 30002
  type: LoadBalancer
---
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
  name: myappdeployment
spec:
  replicas: 5
  template:
    metadata:
      labels:
        app: myapp
    spec:
      containers:
      - name: myapp
        image: tutum/hello-world
        ports:
        - containerPort: 8080
  

Я ожидаю, что смогу подключиться к этой службе со своего локального компьютера по

 http://192.168.64.2:30002
  

Согласно команде: minikube service exampleservice --url но когда я пытаюсь получить доступ к этому из браузера, я получаю сообщение об ошибке «сайт недоступен».

Некоторая информация, которая может помочь в отладке:

kubectl get services --all-namespaces :

 NAMESPACE     NAME                   TYPE           CLUSTER-IP       EXTERNAL-IP   PORT(S)                  AGE
default       exampleservice         LoadBalancer   10.104.248.158   <pending>     8081:30002/TCP           26m
default       kubernetes             ClusterIP      10.96.0.1        <none>        443/TCP                  2h
default       user-service-service   LoadBalancer   10.110.181.202   <pending>     8080:30001/TCP           42m
kube-system   kube-dns               ClusterIP      10.96.0.10       <none>        53/UDP,53/TCP,9153/TCP   2h
kube-system   kubernetes-dashboard   ClusterIP      10.110.65.24     <none>        80/TCP                   2h
  

Я запускаю minikube на OSX.

Ответ №1:

Вы можете использовать внешние IP-адреса, как описано в документах k8s. Обновите службу, как показано ниже (где, как я предполагаю 192.168.64.2 , находится ваш IP-адрес minikube).:

 kind: Service
apiVersion: v1
metadata:
  name: exampleservice
spec:
  selector:
    app: myapp
  ports:
  - protocol: "TCP"
    # Port accessible inside cluster
    port: 8081
    # Port to forward to inside the pod
    targetPort: 80
    # Port accessible outside cluster
    nodePort: 30002
  type: LoadBalancer
  externalIPs:
  - 192.168.64.2
  

Теперь вы можете получить доступ к своему приложению по адресуhttp://192.168.64.2:8081 /


Если вам нужно получить доступ к приложению на 30002, вы можете использовать его следующим образом

     kind: Service
    apiVersion: v1
    metadata:
      name: exampleservice
    spec:
      selector:
        app: myapp
      ports:
      - protocol: "TCP"
        # Port accessible inside cluster
        port: 8081
        # Port to forward to inside the pod
        targetPort: 80
        # Port accessible outside cluster
        nodePort: 30002
      type: NodePort
  

Мне кажется, что ваш файл развертывания не соответствует действительности.

удалите ее kubectl delete deploy/myappdeployment

используйте это для повторного создания.

 apiVersion: apps/v1beta1
kind: Deployment
metadata:
  labels:
    app: myapp
  name: myappdeployment
spec:
  replicas: 5
  selector:
    matchLabels:
      app: myapp
  strategy: {}
  template:
    metadata:
      labels:
        app: myapp
    spec:
      containers:
      - image: tutum/hello-world
        name: myapp
        ports:
        - containerPort: 80
  

Ответ №2:

ПРИМЕЧАНИЕ: Minikube поддерживает службы балансировки нагрузки (через minikube tunnel )

вы можете получить IP-адрес и порт, через которые вы можете получить доступ к службе, выполнив

minikube service kubia-http #=> To open a browser with an IP and port

или

minikube service kubia --url #=> To get the IP and port in the terminal