无法访问kubernetes上的公开端口

无法访问kubernetes上的公开端口,kubernetes,kubernetes-service,Kubernetes,Kubernetes Service,我已经构建了一个定制的tcserver映像,公开了端口8080和8443。基本上,您有一个apache,并且在配置中有一个代理传递将其转发到tcserver tomcat。 EXPOSE 80 8080 8443 之后,我创建了一个kubernetes yaml来构建pod,只暴露端口80 apiVersion: v1 kind: Pod metadata: name: tcserver namespace: default spec: containers: - name:

我已经构建了一个定制的tcserver映像,公开了端口8080和8443。基本上,您有一个apache,并且在配置中有一个代理传递将其转发到tcserver tomcat。

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
但问题是我无法访问它。
如果我登录到pod(
kubectl exec-it tcserver--/bin/bash
),我就能够执行
curl-k-vhttp://localhost
它会回复。

我相信我的服务有问题,但我不知道是什么。
任何帮助都将不胜感激

SVC更改
根据sfgroups的建议,我将
targetPort:80
添加到svc中,但仍然无法工作

当我尝试卷曲IP时,我得到一个到主机的无路由

[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>
[root@testmastertcserver]#kubectl描述svc tcserver svc
名称:tcserver svc
名称空间:默认值
标签:app=tcserver
注释:
选择器:app=tcserver
类型:节点端口
IP:172.30.62.162
端口:80/TCP
节点端口:30080/TCP
端点:
会话关联:无
活动:

我看到目标post丢失,您可以添加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

当您查看
kubectl descripe service
输出时,您会发现它实际上并没有连接到任何pod:

Endpoints:              <none>
但是,在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: [...]

在您的服务中,我看到选择器是
app:tcserver
,但我在Pod定义中没有看到标签。根据文档,
请注意,服务可以将传入端口映射到任何targetPort。默认情况下,targetPort将设置为与port字段相同的值。因此无需明确定义
nodePort
。@JasonStanley,同意nodePort不需要。正如David指出的标签选择器问题,我将其部署为一个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: [...]