【问题标题】:Naming a service in Kubernetes prevents it from starting在 Kubernetes 中命名服务会阻止它启动
【发布时间】:2020-02-15 02:43:32
【问题描述】:

这是一个用于部署的 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 时,它的 pod 将无法启动。当我将其重命名为 gateway-service 或将其重命名为 gateway1gateway-blablabla 时,一切正常。

Kubectl 的日志显示:

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

【问题讨论】:

  • 您是否也对入口规则文件进行了相应的更改?
  • 是的,还有

标签: kubernetes yaml kubectl


【解决方案1】:

试试下面的 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>

【讨论】:

  • 这个 yaml 不是和我的 yaml 一样吗?
  • 检查服务名称和入口对应的变化
  • 是的,我改变了。但运气不好,“网关”这个名字不起作用
  • kubectl 获取 po,svc | grep 网关pod/gateway-deployment-5b5c66d595-bh8pv 0/1 CrashLoopBackOff 1 13s pod/gateway-deployment-5b5c66d595-rqp4p 0/1 CrashLoopBackOff 1 13s service/gateway NodePort 10.98.187.166 &lt;none&gt; 4001:30001/TCP 13
  • 吊舱的一些问题。您在 pod 中使用服务名称吗?分享 pod 日志
【解决方案2】:

我终于想通了。感谢 P Ekambaram 的评论“pod 出现了一些问题。您在 pod 中使用服务名称吗?”

问题在于 .env 文件

GATEWAY_PORT=4001

这是为了本地开发目的。我将其重命名为 LOCAL_GATEWAY_PORT,现在 pod 可以使用名为“gateway”的服务。

【讨论】:

    【解决方案3】:

    感谢P Ekambaram 的建议,并为其他社区成员提供更多信息,以防他们遇到同样的问题:

    根据Discovering services 机制 - 一旦创建了服务,所有应用于 PODS 环境的信息:

    注意:

    当 Pod 在 Node 上运行时,kubelet 会为每个活动的 Service 添加一组环境变量。它支持 Docker 链接兼容变量(请参阅 makeLinkVariables)和更简单的 {SVCNAME}_SERVICE_HOST 和 {SVCNAME}_SERVICE_PORT 变量,其中服务名称为大写,破折号转换为下划线。

    正确的环境变量应该如下所示:

    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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2023-04-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-10-07
      • 1970-01-01
      相关资源
      最近更新 更多