【问题标题】:Unable to call my Loadbalanced service in Kubernetes无法在 Kubernetes 中调用我的负载均衡服务
【发布时间】:2020-04-26 15:00:24
【问题描述】:

我有一个应用程序,在 Jetty Server 上运行并侦听端口 8080。我已将其部署为容器。应用程序运行正常,如果我在 pod 中执行 curl -v http://127.0.0.1:8080,我会得到正确的响应。

我的 pod 也有一个地址。让我们称之为 10.1.2.3(假设)。如果我尝试执行 curl -v http://10.1.2.3:8080,我会关闭连接。

我尝试将我的应用程序启动的地址更改为 10.1.2.3,然后 curl 工作。但是,我觉得这违背了容器化的目的,因为我事先无法访问该 IP。

我还有一个负载平衡服务,我将端口 33000 映射到我的服务端口 8080。该服务被分配了一个节点端口 34000。由于它在我的本地 docker 上运行,我的目标是做一个 curl -v http://localhost:34000 并到达我的应用程序,但这显然不会发生。

有人可以帮忙看看我做错了什么吗?我对容器和服务的定义如下:

resource.yaml

apiVersion: apps/v1
kind: Deployment
metadata:
  name: myapp-service-dev-pod1
  labels:
    app: myapp-service-dev
    component: myapp-service-dev
spec:
  selector:
    matchLabels:
      app: myapp-service-dev-pod1
  replicas: 2    
  template:
    metadata:
      labels:
        app: myapp-service-dev-pod1
        component: myapp-service-dev
    spec:
      volumes:
        - name: shared-dev-data
          emptyDir: {}
      containers:
        - name: myapp-service-dev-pod1
          image: docker/my-apps/mybuild_service:9
          ports:
            - containerPort: 8080
          volumeMounts:
            - name: shared-dev-data
              mountPath: /opt/myapp/jetty/logs

service.yaml

apiVersion: v1
kind: Service
metadata:
  name: myapp-service-dev-lb
  labels:
    app: myapp-service-dev
spec:
  ports:
    - port: 33000
      protocol: TCP
      name: http
      targetPort: 8080
  selector:
    component: myapp-service-dev
  type: LoadBalancer

【问题讨论】:

    标签: docker kubernetes jetty kubernetes-ingress


    【解决方案1】:

    根据您的配置,该链接应位于:

    http://localhost:33000/
    

    或者你需要更改端口

    - port: 33000 # external port
    

    到港口:

    - port: 8080 # external port
    

    那么地址会变成这样:

    http://localhost:8080/
    

    根据你的“Load Balancer”平衡类型,所有的请求都会发送到LoadBalancer类型的服务端口,然后再发送请求到pod的targetPort。

    您可以找到有关您的平衡类型的更多信息here。

    【讨论】:

    • 谢谢。这与 Arghya Sadhu 建议的改变一起工作。我期待我的服务可以在节点端口提供给外部服务。但是端口配置有效。再次感谢
    【解决方案2】:

    让码头监听 0.0.0.0 而不是 127.0.0.1 检查 this 以了解如何做到这一点。当您通过http://PODIP:8080 访问它时,这应该可以解决connection closed 问题

    【讨论】:

    • 非常感谢。这绝对是缺失的部分。一旦我让 Jetty 在 0.0.0.0 上启动,整个网络在 V Mokrecov 的建议下就位
    猜你喜欢
    • 2022-10-23
    • 2013-08-26
    • 1970-01-01
    • 2021-03-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多