Присвоение имени сервису в Kubernetes препятствует его запуску - PullRequest
0 голосов
/ 18 октября 2019

Вот пример файла yaml для развертывания:

apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
  name: ingress
spec:
  backend:
    serviceName: gateway-service
    servicePort: 4001
---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: gateway-deployment
spec:
  selector:
    matchLabels:
      app: gateway
  replicas: 2
  template:
    metadata:
      labels:
        app: gateway
    spec:
      containers:
      - name: gateway
        image: hello-go-microservices_gateway
        imagePullPolicy: Never
        ports:
        - containerPort: 4001
          protocol: TCP
---
apiVersion: v1
kind: Service
metadata:
  name: gateway-service
spec:
  selector:
    app: gateway
  ports:
  - protocol: TCP
    port: 4001
    targetPort: 4001
    nodePort: 30001
  type: NodePort

Как видите, сервис называется gateway-service . Проблема в том, что когда я переименую его просто в gateway , он не запускается. Когда я переименовываю его в gateway-service back или переименовываю в gateway1 , или в gateway-blablabla , все настройки работают хорошо.

Логи Kubectl показывают:

Failed to decode: strconv.ParseInt: parsing "tcp://10.101.177.91:4001": invalid syntax

Ответы [ 3 ]

2 голосов
/ 18 октября 2019

Благодаря предложению P Ekambaram и предоставлению дополнительной информации другим членам сообщества на тот случай, если у них возникнет та же проблема:

Согласно Обнаружение услуг механизм - после того, как служба была создана, вся информация применительно к PODS env:

Примечание:

Когда Pod запускается на узле, kubelet добавляет набор переменных средыза каждую активную услугу. Он поддерживает переменные, совместимые с Docker-связями (см. MakeLinkVariables), и более простые переменные {SVCNAME} _SERVICE_HOST и {SVCNAME} _SERVICE_PORT, где имя службы имеет верхний регистр, а дефисы преобразуются в подчеркивания.

Правильное envпеременные должны выглядеть следующим образом:

GATEWAY_PORT_8080_TCP=tcp://10.4.13.154:8080
GATEWAY_PORT_8080_TCP_PROTO=tcp
GATEWAY_PORT_8080_TCP_PORT=8080
GATEWAY_PORT_8080_TCP_ADDR=10.4.13.154

GATEWAY_SERVICE_HOST=10.4.13.154
GATEWAY_SERVICE_PORT=8080

и значения для: GATEWAY_PORT = tcp: //10.4.13.154: 8080 были переопределены вашими пользовательскими настройками:

 GATEWAY_PORT=8080
2 голосов
/ 18 октября 2019

Попробуйте ниже YAML. он должен работать

apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
  name: ingress
spec:
  backend:
    serviceName: gateway
    servicePort: 4001
---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: gateway-deployment
spec:
  selector:
    matchLabels:
      app: gateway
  replicas: 2
  template:
    metadata:
      labels:
        app: gateway
    spec:
      containers:
      - name: gateway
        image: hello-go-microservices_gateway
        imagePullPolicy: Never
        ports:
        - containerPort: 4001
          protocol: TCP
---
apiVersion: v1
kind: Service
metadata:
  name: gateway
spec:
  selector:
    app: gateway
  ports:
  - protocol: TCP
    port: 4001
    targetPort: 4001
    nodePort: 30001
  type: NodePort

Я только что развернул развертывание и обслуживание. все работало без проблем

master $ kubectl get po,svc | grep gateway

pod/gateway-deployment-6549f895b4-5d9kj   1/1     Running   0          18s
pod/gateway-deployment-6549f895b4-vzqj6   1/1     Running   0          18s
service/gateway      NodePort    10.106.132.46   <none>        4001:30001/TCP   18s
master $ curl 10.106.132.46:4001
<!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>
0 голосов
/ 18 октября 2019

Я наконец разобрался. Благодаря комментарию P Ekambaram «какая-то проблема с модулем. Вы используете имя службы в модуле?»

Проблема была с файлом .env

GATEWAY_PORT=4001

Это для локальной разработки. Я переименовал его в LOCAL_GATEWAY_PORT, и теперь модули работают со службой с именем «шлюз».

...