【问题标题】:Can't access my kubernetes services even after exposing it with LoadBalancer即使在使用 LoadBalancer 公开它后也无法访问我的 kubernetes 服务
【发布时间】:2016-08-16 16:11:50
【问题描述】:

我在 Kubernetes 中创建了复制控制器,配置如下:

{
   "kind":"ReplicationController",
   "apiVersion":"v1",
   "metadata":{
      "name":"guestbook",
      "labels":{
         "app":"guestbook"
      }
   },
   "spec":{
      "replicas":1,
      "selector":{
         "app":"guestbook"
      },
      "template":{
         "metadata":{
            "labels":{
               "app":"guestbook"
            }
         },
         "spec":{
            "containers":[
               {
                  "name":"guestbook",
                  "image":"username/fsharp-microservice:v1",
                  "ports":[
                     {
                        "name":"http-server",
                        "containerPort":3000
                     }
                  ],
                  "command": ["fsharpi", "/home/SuaveServer.fsx"]
               }
            ]
         }
      }
   }
}

在 3000 端口上运行的服务的代码基本上是这样的:

#r "Suave.dll"
#r "Mono.Posix.dll"
open Suave
open Suave.Http
open Suave.Successful
open System
open System.Net
open System.Threading
open System.Diagnostics
open Mono.Unix
open Mono.Unix.Native

let app = OK "PONG"

let port = 3000us
let config =
  { defaultConfig with
     bindings = [ HttpBinding.mk HTTP IPAddress.Loopback port ]
     bufferSize = 8192
     maxOps = 10000
  }

open System.Text.RegularExpressions

let cts = new CancellationTokenSource()
let listening, server = startWebServerAsync config app
Async.Start(server, cts.Token)

Console.WriteLine("Server should be started at this point")
Console.ReadLine()

创建服务后,我可以看到 pod:

$kubectl create -f guestbook.json
replicationcontroller "guestbook" created
$ kubectl get pods
NAME                   READY     STATUS             RESTARTS   AGE
guestbook-0b9py        1/1       Running            0          32m

我想访问我的 Web 服务并使用 type=LoadBalancer 创建服务,该服务将使用以下配置公开 3000 端口:

{
   "kind":"Service",
   "apiVersion":"v1",
   "metadata":{
      "name":"guestbook",
      "labels":{
         "app":"guestbook"
      }
   },
   "spec":{
      "ports": [
         {
           "port":3000,
           "targetPort":"http-server"
         }
      ],
      "selector":{
         "app":"guestbook"
      },
      "type": "LoadBalancer"
   }
}

结果如下:

$ kubectl create -f guestbook-service.json
service "guestbook" created
$ kubectl get services
NAME         CLUSTER-IP   EXTERNAL-IP   PORT(S)    AGE
guestbook    10.0.82.40                 3000/TCP   7s
kubernetes   10.0.0.1     <none>        443/TCP    3h
$ kubectl describe services
Name:           guestbook
Namespace:      default
Labels:         app=guestbook
Selector:       app=guestbook
Type:           LoadBalancer
IP:         10.0.82.40
LoadBalancer Ingress:   a43eee4a008cf11e68f210a4fa30c03e-1918213320.us-west-2.elb.amazonaws.com
Port:           <unset> 3000/TCP
NodePort:       <unset> 30877/TCP
Endpoints:      10.244.1.6:3000
Session Affinity:   None
Events:
  FirstSeen LastSeen    Count   From            SubobjectPath   Type        Reason          Message
  --------- --------    -----   ----            -------------   --------    ------          -------
  18s       18s     1   {service-controller }           Normal      CreatingLoadBalancer    Creating load balancer
  17s       17s     1   {service-controller }           Normal      CreatedLoadBalancer Created load balancer


Name:           kubernetes
Namespace:      default
Labels:         component=apiserver,provider=kubernetes
Selector:       <none>
Type:           ClusterIP
IP:         10.0.0.1
Port:           https   443/TCP
Endpoints:      172.20.0.9:443
Session Affinity:   None
No events.

“外部 IP”栏为空

我尝试使用“LoadBalancer Ingress”访问服务,但无法解析 DNS 名称。

如果我在 AWS 控制台中检查 - 负载均衡器已创建(但在详细信息面板中,由于运行状况检查,消息“0 of 2 instances in service”)。

我也尝试使用 kubectl expose --type=Load-Balancer 公开我的 RC,但结果是一样的。

有什么问题?

【问题讨论】:

  • 你能把每个 pod 上的内部集群 IP 放在 3000 端口上吗?您可以通过其内部 IP 和端口 3000 访问该服务吗? AWS 是否也配置为使用端口 3000?
  • @TimoReimann AWS 在 EC2 实例的设置中全部打开,我检查了安全组的规则。稍后将尝试内部和集群 IP
  • @Timoreimann 不,无法使用内部 IP 和集群 IP 访问它。 AWS 配置为使用该端口,它是全部开放的。还有什么可能是什么,为什么我什么也达不到?
  • @TimoReimann 嘿,朋友,我成功了。问题出在实际的微服务中。 Web 服务器代码中的 0.0.0.0 而不是 127.0.0.1。
  • 您会自己发布问题的答案,以便后代知道吗?

标签: amazon-web-services ip load-balancing kubernetes


【解决方案1】:

我修正了错误。

事情在实际服务中。它需要监听 0.0.0.0 而不是 127.0.0.1 或 localhost。这样,它将侦听每个可用的网络接口。有关 0.0.0.0 和 127.0.0.1 之间差异的更多详细信息:https://serverfault.com/questions/78048/whats-the-difference-between-ip-address-0-0-0-0-and-127-0-0-1

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-07-12
    • 2021-03-16
    • 1970-01-01
    • 2019-06-19
    • 2019-07-26
    • 2019-06-26
    • 2019-09-26
    • 2019-03-26
    相关资源
    最近更新 更多