kubernetes:服务端点可从集群内部而不是外部使用
我在k8s集群中有一个服务(kubernetes:服务端点可从集群内部而不是外部使用,kubernetes,rancher,Kubernetes,Rancher,我在k8s集群中有一个服务(LoadBalancer)定义,它公开80和443端口 在k8s仪表板中,指示这些是外部端点: (k8s已使用rancher部署,以解决问题) 两者都成功(即它们获取index.html文件) 从集群外部: wget <some_rancher_agent_public_ip>:80 wget <some_rancher_agent_public_ip>:443 Connecting to <some_rancher_agent_pub
LoadBalancer
)定义,它公开80
和443
端口
在k8s
仪表板中,指示这些是外部端点:
(k8s已使用rancher部署,以解决问题)
两者都成功(即它们获取index.html
文件)
从集群外部:
wget <some_rancher_agent_public_ip>:80
wget <some_rancher_agent_public_ip>:443
Connecting to <some_rancher_agent_public_ip>:80... connected.
HTTP request sent, awaiting response...
2018-01-05 17:42:51 ERROR 502: Bad Gateway.
以下是相应的pod说明:
kubectl describe pod <the_pod_id>
Name: <pod_id>
Namespace: default
Node: ran-agnt-02/<some_rancher_agent_public_ip>
Start Time: Fri, 29 Dec 2017 16:48:42 +0200
Labels: els-pod=ui
pod-template-hash=375086521
Annotations: kubernetes.io/created-by={"kind":"SerializedReference","apiVersion":"v1","reference":{"kind":"ReplicaSet","namespace":"default","name":"ui-deployment-7c94db965","uid":"5cea65ea-eca7-11e7-b8e0-0203f78b...
Status: Running
IP: 10.42.179.14
Created By: ReplicaSet/ui-deployment-7c94db965
Controlled By: ReplicaSet/ui-deployment-7c94db965
Containers:
ui:
Container ID: docker://some-container-id
Image: docker-registry/imagename
Image ID: docker-pullable://docker-registry/imagename@sha256:some-sha
Port: 80/TCP
State: Running
Started: Fri, 05 Jan 2018 16:24:56 +0200
Last State: Terminated
Reason: Error
Exit Code: 1
Started: Fri, 05 Jan 2018 16:23:21 +0200
Finished: Fri, 05 Jan 2018 16:23:31 +0200
Ready: True
Restart Count: 5
Environment: <none>
Mounts:
/var/run/secrets/kubernetes.io/serviceaccount from default-token-8g7bv (ro)
Conditions:
Type Status
Initialized True
Ready True
PodScheduled True
Volumes:
default-token-8g7bv:
Type: Secret (a volume populated by a Secret)
SecretName: default-token-8g7bv
Optional: false
QoS Class: BestEffort
Node-Selectors: <none>
Tolerations: node.alpha.kubernetes.io/notReady:NoExecute for 300s
node.alpha.kubernetes.io/unreachable:NoExecute for 300s
Events: <none>
kubectl描述pod
姓名:
名称空间:默认值
节点:ran-agnt-02/
开始时间:2017年12月29日星期五16:48:42+0200
标签:els pod=ui
pod模板哈希=375086521
注释:kubernetes.io/创建人={“种类”:“SerializedReference”,“apiVersion”:“v1”,“reference”:{“种类”:“ReplicaSet”,“命名空间”:“默认”,“名称”:“ui-deployment-7c94db965”,“uid”:“5cea65ea-eca7-11e7-b8e0-0203f78b…”。。。
状态:正在运行
IP:10.42.179.14
创建人:ReplicaSet/ui-deployment-7c94db965
控制人:ReplicaSet/ui-deployment-7c94db965
容器:
用户界面:
容器ID:docker://some-container-id
图像:docker注册表/imagename
图像ID:docker-pullable://docker-registry/imagename@sha256:一些sha
端口:80/TCP
状态:正在运行
开始时间:2018年1月5日星期五16:24:56+0200
最后状态:终止
原因:错误
退出代码:1
开始时间:2018年1月5日星期五16:23:21+0200
完成日期:2018年1月5日星期五16:23:31+0200
准备好了吗
重新启动计数:5
环境:
挂载:
/来自default-token-8g7bv(ro)的var/run/secrets/kubernetes.io/serviceCount
条件:
类型状态
初始化为True
准备好了吗
播客预定为真
卷数:
default-token-8g7bv:
类型:Secret(由Secret填充的卷)
SecretName:default-token-8g7bv
可选:false
QoS等级:最佳努力
节点选择器:
容差:node.alpha.kubernetes.io/notReady:NoExecute持续300秒
node.alpha.kubernetes.io/不可访问:不执行300秒
活动:
Kubernetes提供了将POD暴露到集群外部的不同方法,主要是服务
和入口
。我将重点介绍服务
,因为您在这方面有问题
有不同的服务
类型,其中包括:
- 群集IP:默认类型。选择此类型意味着您的服务获得稳定的IP,该IP只能从群集内部访问。此处不相关
- 节点端口:除了拥有集群内部IP之外,在集群的每个节点上的随机端口上公开服务(每个节点上的相同端口)。您可以通过任何NodeIP:NodePort地址联系该服务。这就是为什么您可以从集群外部联系您的
rancher\u代理\u public\u ip:NodePort
- 负载平衡器:除了拥有集群内部IP和在节点端口上公开服务外,还可以向云提供商请求一个负载平衡器,该负载平衡器使用云提供商的负载平衡器在外部公开服务
负载平衡器类型的服务
也会使其成为节点端口
。这就是为什么您可以访问rancher\u agent\u public\u ip:30854
我没有rancher方面的经验,但创建负载平衡器
服务似乎部署了一个HAProxy来充当负载平衡器。rancher创建的HAProxy需要一个可从集群外部访问的公共IP,以及一个将请求重定向到节点端口的端口
但是在您的服务中,IP看起来像一个内部IP 10.43.74.106。从集群外部无法访问该IP。您需要一个公共IP。Kubernetes提供了向集群外部公开POD的不同方法,主要是服务和入口。我将重点介绍服务h那
有不同的服务
类型,其中包括:
- 群集IP:默认类型。选择此类型意味着您的服务获得稳定的IP,该IP只能从群集内部访问。此处不相关
- 节点端口:除了拥有集群内部IP之外,在集群的每个节点上的随机端口上公开服务(每个节点上的相同端口)。您可以通过任何NodeIP:NodePort地址联系该服务。这就是为什么您可以从集群外部联系您的
rancher\u代理\u public\u ip:NodePort
- 负载平衡器:除了拥有集群内部IP和在节点端口上公开服务外,还可以向云提供商请求一个负载平衡器,该负载平衡器使用云提供商的负载平衡器在外部公开服务
创建负载平衡器类型的服务
也会使其成为节点端口
。这就是为什么您可以访问rancher\u agent\u public\u ip:30854
我没有rancher方面的经验,但创建负载平衡器
服务似乎部署了一个HAProxy来充当负载平衡器。rancher创建的HAProxy需要一个可从集群外部访问的公共IP,以及一个将请求重定向到节点端口的端口
但是在您的服务中,IP看起来像一个内部IP 10.43.74.106。从集群外部无法访问该IP。您需要一个公共IP。您能用kubectl Descripte svc
的输出更新问题吗?谢谢!问题更新谢谢。我相信您正在AWS上运行。您能看到在a中创建的负载平衡器吗WS-console?通常,当使用LoadBalancer类型的服务时,您不会直接连接到rancher代理公共ip
$ kubectl describe svc ui
Name: ui
Namespace: default
Labels: <none>
Annotations: service.beta.kubernetes.io/aws-load-balancer-ssl-cert=arn:aws:acm:eu-west-1:somecertid
Selector: els-pod=ui
Type: LoadBalancer
IP: 10.43.74.106
LoadBalancer Ingress: <some_rancher_agent_public_ip>, <some_rancher_agent_public_ip>
Port: http 80/TCP
TargetPort: %!d(string=ui-port)/TCP
NodePort: http 30854/TCP
Endpoints: 10.42.179.14:80
Port: https 443/TCP
TargetPort: %!d(string=ui-port)/TCP
NodePort: https 31404/TCP
Endpoints: 10.42.179.14:80
Session Affinity: None
External Traffic Policy: Cluster
Events: <none>
kubectl describe pod <the_pod_id>
Name: <pod_id>
Namespace: default
Node: ran-agnt-02/<some_rancher_agent_public_ip>
Start Time: Fri, 29 Dec 2017 16:48:42 +0200
Labels: els-pod=ui
pod-template-hash=375086521
Annotations: kubernetes.io/created-by={"kind":"SerializedReference","apiVersion":"v1","reference":{"kind":"ReplicaSet","namespace":"default","name":"ui-deployment-7c94db965","uid":"5cea65ea-eca7-11e7-b8e0-0203f78b...
Status: Running
IP: 10.42.179.14
Created By: ReplicaSet/ui-deployment-7c94db965
Controlled By: ReplicaSet/ui-deployment-7c94db965
Containers:
ui:
Container ID: docker://some-container-id
Image: docker-registry/imagename
Image ID: docker-pullable://docker-registry/imagename@sha256:some-sha
Port: 80/TCP
State: Running
Started: Fri, 05 Jan 2018 16:24:56 +0200
Last State: Terminated
Reason: Error
Exit Code: 1
Started: Fri, 05 Jan 2018 16:23:21 +0200
Finished: Fri, 05 Jan 2018 16:23:31 +0200
Ready: True
Restart Count: 5
Environment: <none>
Mounts:
/var/run/secrets/kubernetes.io/serviceaccount from default-token-8g7bv (ro)
Conditions:
Type Status
Initialized True
Ready True
PodScheduled True
Volumes:
default-token-8g7bv:
Type: Secret (a volume populated by a Secret)
SecretName: default-token-8g7bv
Optional: false
QoS Class: BestEffort
Node-Selectors: <none>
Tolerations: node.alpha.kubernetes.io/notReady:NoExecute for 300s
node.alpha.kubernetes.io/unreachable:NoExecute for 300s
Events: <none>