![](/img/trans.png)
[英]How can I have one Kubernetes LoadBalancer balance to multiple services?
[英]Can't access my kubernetes services even after exposing it with LoadBalancer
我已經在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控制台中簽入-負載均衡器已創建(但由於運行狀況檢查,在詳細信息面板中會出現一條消息“服務中2個實例中的0個”)。
我也嘗試過使用kubectl暴露--type = Load-Balancer暴露我的RC,但是結果是一樣的。
問題是什么?
我已修正錯誤。
事情是在實際服務中。 它需要在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
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.