kubernetes:服务端点可从集群内部而不是外部使用

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

我在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_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>