【问题标题】:Not able to communicate with Pods locally created in AWS EC2 instance with kubernetes无法使用 kubernetes 与在 AWS EC2 实例中本地创建的 Pod 通信
【发布时间】:2020-02-10 20:05:47
【问题描述】:

我在 Ubuntu EC2 实例中创建了简单的 nginx 部署,并通过 kubernetes 集群中的服务暴露到端口,但即使在本地环境中我也无法 ping 通这些 pod。我的 Pod 运行良好,服务也成功创建。我在下面分享一些命令的输出

kubectl 获取节点

NAME               STATUS   ROLES    AGE     VERSION
ip-172-31-39-226   Ready    <none>   2d19h   v1.16.1
master-node        Ready    master   2d20h   v1.16.1

kubectl 获取 po -o 宽

NAME                                READY   STATUS    RESTARTS   AGE    IP              NODE               NOMINATED NODE   READINESS GATES
nginx-deployment-54f57cf6bf-dqt5v   1/1     Running   0          101m   192.168.39.17   ip-172-31-39-226   <none>           <none>
nginx-deployment-54f57cf6bf-gh4fz   1/1     Running   0          101m   192.168.39.16   ip-172-31-39-226   <none>           <none>
sample-nginx-857ffdb4f4-2rcvt       1/1     Running   0          20m    192.168.39.18   ip-172-31-39-226   <none>           <none>
sample-nginx-857ffdb4f4-tjh82       1/1     Running   0          20m    192.168.39.19   ip-172-31-39-226   <none>           <none>

kubectl 获取服务

NAME               TYPE           CLUSTER-IP      EXTERNAL-IP   PORT(S)        AGE
kubernetes         ClusterIP      10.96.0.1       <none>        443/TCP        2d20h
nginx-deployment   NodePort       10.101.133.21   <none>        80:31165/TCP   50m
sample-nginx       LoadBalancer   10.100.77.31    <pending>     80:31854/TCP   19m

kubectl 描述部署 nginx-deployment

Name:                   nginx-deployment
Namespace:              default
CreationTimestamp:      Mon, 14 Oct 2019 06:28:13 +0000
Labels:                 <none>
Annotations:            deployment.kubernetes.io/revision: 1
                        kubectl.kubernetes.io/last-applied-configuration:
                          {"apiVersion":"apps/v1","kind":"Deployment","metadata":{"annotations":{},"name":"nginx-deployment","namespace":"default"},"spec":{"replica...
Selector:               app=nginx
Replicas:               2 desired | 2 updated | 2 total | 2 available | 0 unavailable
StrategyType:           RollingUpdate
MinReadySeconds:        0
RollingUpdateStrategy:  25% max unavailable, 25% max surge
Pod Template:
  Labels:  app=nginx
  Containers:
   nginx:
    Image:        nginx:1.7.9
    Port:         80/TCP
    Host Port:    0/TCP
    Environment:  <none>
    Mounts:       <none>
  Volumes:        <none>
Conditions:
  Type           Status  Reason
  ----           ------  ------
  Available      True    MinimumReplicasAvailable
  Progressing    True    NewReplicaSetAvailable
OldReplicaSets:  <none>
NewReplicaSet:   nginx-deployment-54f57cf6bf (2/2 replicas created)
Events:          <none>

现在我无法从 master ping 192.168.39.17/16/18/19,也无法从 master 访问 curl 172.31.39.226:31165/31854。任何帮助将不胜感激..

【问题讨论】:

  • curl 的响应是什么?另外,您可以发布每个 pod 的日志吗? .此外,根据节点命名策略,节点名称中的 IP 和您正在使用的 IP 很可能是您的工作实例的私有 IP。
  • 感谢您的回复。输出为 curl 172.31.39.226@31165 curl: (7) 如果我无法访问本地集群中的私有 IP,则无法连接到服务器。我怎样才能从外部访问它。
  • @damitj07 在主人
  • 所以master将无法curl工作节点的私有IP。这不是它的工作原理。
  • 通过master可以ping通worker的私网IP。我也尝试过使用公共IP。 curl 52.201.242.84@31854 curl: (7) 无法连接到服务器仍然输出相同

标签: amazon-web-services docker nginx kubernetes cluster-computing


【解决方案1】:

根据您提供的信息。从讨论中我们得知工作节点运行了 Nginx pod。并且您已将 NodePort 服务和负载均衡器服务附加到它。

这里唯一缺少的是您尝试访问它的服务器。

所以,我尝试访问此 URL 52.201.242.84:31165。我认为您需要做的就是将此端口列入白名单以供公共访问或 IP。这可以通过工作节点 EC2 的安全组来完成。

现在上面的 URL 是由工作节点的公共 IP 加上(+)附加的 NodePort svc 构建的。因此,这里有一个简单的公式,您可以使用它来获取正在运行的 pod 的确切地址。

Pod Access URL = Public IP of Worker Node + The NodePort 

【讨论】:

    猜你喜欢
    • 2017-10-10
    • 2022-11-16
    • 2021-06-19
    • 1970-01-01
    • 2021-07-13
    • 1970-01-01
    • 2018-08-04
    • 1970-01-01
    • 2015-10-31
    相关资源
    最近更新 更多