首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >无法访问kubernetes上暴露的端口

无法访问kubernetes上暴露的端口
EN

Stack Overflow用户
提问于 2019-01-10 19:10:40
回答 2查看 4.1K关注 0票数 3

我已经构建了一个自定义的tcserver映像,公开了端口80、8080和8443。基本上,您有一个apache,在配置中有一个代理通行证将其转发给tcserver。

代码语言:javascript
复制
EXPOSE 80 8080 8443

在此之后,我创建了一个kubernetes yaml来构建荚,只公开了端口80。

代码语言:javascript
复制
apiVersion: v1
kind: Pod
metadata:
  name: tcserver
  namespace: default
spec:
  containers:
  - name: tcserver
    image: tcserver-test:v1
    imagePullPolicy: IfNotPresent
    ports:
    - containerPort: 80

以及它的服务。

代码语言:javascript
复制
apiVersion: v1
kind: Service
metadata:
  name: tcserver-svc
  labels:
    app: tcserver
spec:
  type: NodePort
  ports:
  - port: 80
    nodePort: 30080
  selector:
    app: tcserver

但问题是我无法访问它。

如果我登录到pod (kubectl exec -it tcserver -- /bin/bash),我可以做一个curl -k -v http://localhost,它会回复。

我想我的服务做错了,但我不知道是什么。

任何帮助都将不胜感激。

SVC改变

正如sfgroup所建议的,我将targetPort: 80添加到svc中,但仍然无法工作。

当我试图压缩IP时,我得到了一个No路由来承载

代码语言:javascript
复制
[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的描述:

代码语言:javascript
复制
[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>
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-01-11 00:26:03

当您查看kubectl describe service输出时,您会发现它实际上并没有附加到任何豆荚上:

代码语言:javascript
复制
Endpoints:              <none>

这是因为在服务规范中,服务将附加到标记为app: tcserver的荚上

代码语言:javascript
复制
spec:
  selector:
    app: tcserver

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

代码语言:javascript
复制
metadata:
  name: tcserver
  namespace: default
  # labels: {}

因此,这里的修复方法是将适当的标签添加到吊舱规范中。

代码语言:javascript
复制
metadata:
  labels:
    app: tcserver

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

代码语言:javascript
复制
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: [...]
票数 8
EN

Stack Overflow用户

发布于 2019-01-10 20:12:19

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

代码语言:javascript
复制
apiVersion: v1
kind: Service
metadata:
  name: tcserver-svc
  labels:
    app: tcserver
spec:
  type: NodePort
  ports:
  - port: 80
    nodePort: 30080
    targetPort: 80
  selector:
    app: tcserver
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54135446

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档