代码之家  ›  专栏  ›  技术社区  ›  radicaled

无法访问kubernetes上的公开端口

  •  1
  • radicaled  · 技术社区  · 6 年前


    EXPOSE 80 8080 8443
    

    之后,我创建了一个kubernetes yaml来构建pod,只暴露端口80。

    apiVersion: v1
    kind: Pod
    metadata:
      name: tcserver
      namespace: default
    spec:
      containers:
      - name: tcserver
        image: tcserver-test:v1
        imagePullPolicy: IfNotPresent
        ports:
        - containerPort: 80
    

    apiVersion: v1
    kind: Service
    metadata:
      name: tcserver-svc
      labels:
        app: tcserver
    spec:
      type: NodePort
      ports:
      - port: 80
        nodePort: 30080
      selector:
        app: tcserver
    

    但问题是我无法访问它。
    如果我登录到吊舱( kubectl exec -it tcserver -- /bin/bash ),我能做一个 curl -k -v http://localhost 它会回答。

    我相信我的服务有问题,但我不知道是什么。

    SVC变化
    targetPort: 80 至svc,但仍不工作。

    [root@testmaster tcserver]# curl -k -v http://172.30.62.162:30080/
    * About to connect() to 172.30.62.162 port 30080 (#0)
    *   Trying 172.30.62.162...
    * No route to host
    * Failed connect to 172.30.62.162:30080; No route to host
    * Closing connection 0
    curl: (7) Failed connect to 172.30.62.162:30080; No route to host
    

    这是来自svc的描述:

    [root@testmaster tcserver]# kubectl describe svc tcserver-svc
    Name:                   tcserver-svc
    Namespace:              default
    Labels:                 app=tcserver
    Annotations:            <none>
    Selector:               app=tcserver
    Type:                   NodePort
    IP:                     172.30.62.162
    Port:                   <unset> 80/TCP
    NodePort:               <unset> 30080/TCP
    Endpoints:              <none>
    Session Affinity:       None
    Events:                 <none>
    
    2 回复  |  直到 6 年前
        1
  •  5
  •   David Maze    6 年前

    当你看到 kubectl describe service 输出时,您将看到它实际上没有连接到任何吊舱:

    Endpoints:              <none>
    

    这是因为您在服务规范中说,服务将附加到吊舱 标记 app: tcserver

    spec:
      selector:
        app: tcserver
    

    但是,在pod规范的元数据中,您根本没有指定任何标签

    metadata:
      name: tcserver
      namespace: default
      # labels: {}
    

    因此,这里的修复方法是在pod规范中添加适当的标签

    metadata:
      labels:
        app: tcserver
    

    还请注意,在实践中部署裸吊舱有点不寻常。通常,它们被封装在一个更高级别的控制器中,通常是一个部署,它实际上创建了吊舱。部署规范有一个模板pod规范,pod的标签才是关键。

    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: tcserver
      # Labels here are useful, but the service doesn't look for them
    spec:
      template:
        metadata:
          labels:
            # These labels are what the service cares about
            app: tcserver
        spec:
          containers: [...]
    
        2
  •  0
  •   sfgroups    6 年前

    我看到目标帖子丢失了,你能添加traget端口和测试吗?

    apiVersion: v1
    kind: Service
    metadata:
      name: tcserver-svc
      labels:
        app: tcserver
    spec:
      type: NodePort
      ports:
      - port: 80
        nodePort: 30080
        targetPort: 80
      selector:
        app: tcserver
    
    推荐文章