Не в состоянии поразить службу kubernetes - PullRequest
0 голосов
/ 07 ноября 2019

Я новичок в kubernetes и не могу устранить проблему. служба и модуль запущены, но я не могу получить ответ от почтальона.

kubectl get service

enter image description here

kubectl get service personservice -o json

{
"apiVersion": "v1",
"kind": "Service",
"metadata": {
    "annotations": {
        "kubectl.kubernetes.io/last-applied-configuration": "{\"apiVersion\":\"v1\",\"kind\":\"Service\",\"metadata\":{\"annotations\":{},\"labels\":{\"app\":\"personservice\"},\"name\":\"personservice\",\"namespace\":\"default\"},\"spec\":{\"ports\":[{\"nodePort\":30001,\"port\":8080,\"protocol\":\"TCP\"}],\"selector\":{\"app\":\"personservice\"},\"type\":\"NodePort\"}}\n"
    },
    "creationTimestamp": "2019-11-07T11:22:04Z",
    "labels": {
        "app": "personservice"
    },
    "name": "personservice",
    "namespace": "default",
    "resourceVersion": "84920",
    "selfLink": "/api/v1/namespaces/default/services/personservice",
    "uid": "d32d4dd8-0150-11ea-80e6-00155d010311"
},
"spec": {
    "clusterIP": "10.98.168.74",
    "externalTrafficPolicy": "Cluster",
    "ports": [
        {
            "nodePort": 30001,
            "port": 8080,
            "protocol": "TCP",
            "targetPort": 8080
        }
    ],
    "selector": {
        "app": "personservice"
    },
    "sessionAffinity": "None",
    "type": "NodePort"
},
"status": {
    "loadBalancer": {}
}

}

kubectl get pods

enter image description here

, когда я пытаюсь ударить его с помощью почтальона

http://100.120.60.210:30001/getPerson?nino=12345Ac&id=1

Я получаю "Произошла ошибка при подключении к http://100.120.60.210:30001/getPerson?nino=12345Ac&id=1."

  IPv4 Address. . . . . . . . . . . : 100.120.60.210 --- Ip address of my laptop.

Изменить 1: Конфигурация развертывания модуля:

 apiVersion: apps/v1
kind: Deployment
metadata:
  name: personservice
  labels:
    app: personservice
spec:
  replicas: 1
  selector:
    matchLabels:
      app: personservice
  template:
    metadata:
      labels:
        app: personservice
    spec:
      containers:
      - name: personservice
        image: microservice-k8s/personmicroservice-k8s:1.0
        ports:
        - containerPort: 8080
        env:
        - name: PROFILE
          value: "dev" 
        - name: SERVER_PORT
          value: "8080"
        - name: ZIPKIN_URI
          value: "http://100.120.60.210:9411"

Редактировать 2:

Я развернул другой модульи службу для проверки, и она работает. Запустил эту команду для службы kubectl get service personservice -o json Единственный обнаруженный мной разностный файл:

Неработающая служба

  "status": {
        "loadBalancer": {}
    }

рабочий сервис:

 "status": {
        "loadBalancer": {
            "ingress": [
                {
                    "hostname": "localhost"
                }
            ]
        }
    }

что может быть причиной пустого статуса?

Редактировать 3:

Портпересылка в модуль и доступ к нему через http://localhost:7000 is работает.

kubectl port-forward personservice-5c66cfcb89-dd6l7 7000:8080

Это означает, что что-то не так только с сервисом.

Ответы [ 2 ]

0 голосов
/ 14 ноября 2019

Я воспроизвел ваш случай в несколько ином сценарии. Вы используете Docker Desktop с Kubernetes, и я решил использовать Minikube для его воспроизведения.

Я использовал ваши файлы yaml в качестве основы для развертывания службы nginx, и я не столкнулся с проблемой, которую вы описываете. Это мое развертывание:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: personservice
  labels:
    app: personservice
spec:
  replicas: 1
  selector:
    matchLabels:
      app: personservice
  template:
    metadata:
      labels:
        app: personservice
    spec:
      containers:
      - name: personservice
        image: nginx
        ports:
        - containerPort: 80

Это мое обслуживание:

apiVersion: v1
kind: Service
metadata:
  labels:
    app: personservice
  name: personservice
  namespace: default
spec:
  externalTrafficPolicy: Cluster
  ports:
  - nodePort: 30001
    port: 80
    protocol: TCP
    targetPort: 80
  selector:
    app: personservice
  sessionAffinity: None
  type: NodePort

Примечание: я использую порт 80 только для моего удобства.

Как видите, эти файлы yaml имеют те же компоненты, что и ваши, и я могу успешно curl мое приложение nginx.

christofoletti@bf:~$ minikube ip
192.168.39.153
christofoletti@bf:~$ curl 192.168.122.36:30001
<!DOCTYPE html>
<html>
<head>
<title>Welcome to nginx!</title>
<style>
    body {
        width: 35em;
        margin: 0 auto;
        font-family: Tahoma, Verdana, Arial, sans-serif;
    }
</style>
</head>
<body>
<h1>Welcome to nginx!</h1>
<p>If you see this page, the nginx web server is successfully installed and
working. Further configuration is required.</p>

<p>For online documentation and support please refer to
<a href="http://nginx.org/">nginx.org</a>.<br/>
Commercial support is available at
<a href="http://nginx.com/">nginx.com</a>.</p>

<p><em>Thank you for using nginx.</em></p>
</body>
</html>

Я настоятельно рекомендую вам воспроизвести его в другой среде, например, с помощью Minikube. Существует множество преимуществ при использовании Minikube вместо Docker Desktop.

0 голосов
/ 11 ноября 2019

Запустите minikube tunnel, чтобы иметь возможность подключиться к IP напрямую.

...