Доступ к локальному хосту из Сервиса - PullRequest
1 голос
/ 22 марта 2019

Новое в Кубернетес.

У меня есть частный образ dockerhub, развернутый на экземпляре Kubernetes.Когда я выполняю exe в модуле, я могу запустить следующее, так что я знаю, что мой образ докера работает:

root@private-reg:/# curl 127.0.0.1:8085
Hello world!root@private-reg:/# 

Из панели инструментов я вижу, что у моей службы есть внешняя конечная точка, которая заканчивается портом 8085. Когда я пытаюсьчтобы загрузить это, я получаю 404. Мой сервис YAML, как показано ниже:

{
  "kind": "Service",
  "apiVersion": "v1",
  "metadata": {
    "name": "test",
    "namespace": "default",
    "selfLink": "/api/v1/namespaces/default/services/test",
    "uid": "a1a2ae23-339b-11e9-a3db-ae0f8069b739",
    "resourceVersion": "3297377",
    "creationTimestamp": "2019-02-18T16:38:33Z",
    "labels": {
      "k8s-app": "test"
    }
  },
  "spec": {
    "ports": [
      {
        "name": "tcp-8085-8085-7vzsb",
        "protocol": "TCP",
        "port": 8085,
        "targetPort": 8085,
        "nodePort": 31859
      }
    ],
    "selector": {
      "k8s-app": "test"
    },
    "clusterIP": "******",
    "type": "LoadBalancer",
    "sessionAffinity": "None",
    "externalTrafficPolicy": "Cluster"
  },
  "status": {
    "loadBalancer": {
      "ingress": [
        {
          "ip": "******"
        }
      ]
    }
  }
}

Может кто-нибудь направить меня в правильном направлении.

Ответы [ 3 ]

1 голос
/ 22 марта 2019

Что выводится из приведенной ниже команды

curl cluzterIP: 8085

Если вы получаете сообщение Hello world, то это означает, что служба корректно перенаправляет трафик на внутренний модуль.

curl HostIP: NODEPORT также должен работать

Скорее всего, служба не привязана к бэкэнд-модулю.Вы определили метку ниже на стручке?

labels: {
      "k8s-app": "test"
    }
1 голос
/ 22 марта 2019

Вы не упомянули, какой тип балансировщика нагрузки или облачного провайдера вы используете, но если ваш балансировщик нагрузки настроен правильно, что вы должны увидеть в журналах kube-controller-manager , то вы должен иметь доступ к вашему сервису с помощью того, что вы видите здесь:

"status": {
  "loadBalancer": {
    "ingress": [
      {
      "ip": "******"
      }
    ]
  }

Тогда вы можете проверить, запустив:

$ curl <ip>:<whatever external port your lb is fronting>

Вполне вероятно, что это не обеспечило, если, как описано в других ответах, это работает:

$ curl <clusterIP for svc>:8085

и

$ curl <NodeIP>:31859 # NodePort
0 голосов
/ 22 марта 2019

Дайте проверить услуги на kuberntes, есть несколько типов:

https://kubernetes.io/docs/concepts/services-networking/service/

ClusterIP: создает доступ к сервису только внутри кластера.

NodePort: доступ к сервису через данный порт на узлах.

LoadBalancer: служба, внешне доступная через LB.

Я предполагаю, что вы работаете на GKE.

Что это за услуга запущенная?

...