【问题标题】:Kubernetes deployment not exposedKubernetes 部署未公开
【发布时间】:2019-05-06 01:40:24
【问题描述】:

出于某种原因,此特定部署不会将其服务暴露给外界。我很确定我的语法没问题,因为我使用一组类似的文件进行仅使用 TCP 的部署。我怀疑同时拥有 TCP 和 UDP 会导致问题。奇怪的是,如果我在其中一名工人中手动运行 docker,它可以工作:

 docker run -p 27015:27015 -p 27015:27015/udp -e STEAM_ACCOUNT_TOKEN=XXXXXXXXXXXXXXXXXX grido/csgo-edge

Service.yaml

apiVersion: v1
kind: Service
metadata:
  name: csgo200
spec:
  selector:
    app: csgo200
  type: NodePort
  ports:
  - name: udpcsgo1
    port: 27015
    protocol: UDP
  - name: tcpcsgo1
    port: 27015
    protocol: TCP

deployment.yaml

apiVersion: apps/v1 # for versions before 1.9.0 use 
apps/v1beta2
kind: Deployment
metadata:
  name: csgo200
spec:
  selector:
    matchLabels:
      app: csgo200
  replicas: 1 
  template:
    metadata:
      labels:
        app: csgo200
    spec:
  containers:
  - name: csgo200
    image: grido/csgo-edge
    ports:
    - name: tcpcsgo200
      containerPort: 27015
      protocol: TCP
    - name: udpcsgo200
      containerPort: 27015
      protocol: UDP
    env:
    - name: STEAM_ACCOUNT_TOKEN
      value: "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"

[root@master ~]# kubectl describe svc csgo200

Name:                     csgo200
Namespace:                default
Labels:                   <none>
Annotations:              kubectl.kubernetes.io/last-applied-configuration:
{"apiVersion":"v1","kind":"Service","metadata": 
{"annotations":{},"name":"csgo200","namespace":"default"},"spec":{"ports": 
[{"name":"udpcsgo...
Selector:                 app=csgo200
Type:                     NodePort
IP:                       10.97.122.32
Port:                     udpcsgo1  27015/UDP
TargetPort:               27015/UDP
NodePort:                 udpcsgo1  31314/UDP
Endpoints:                192.168.1.37:27015
Port:                     tcpcsgo1  27015/TCP
TargetPort:               27015/TCP
NodePort:                 tcpcsgo1  31314/TCP
Endpoints:                192.168.1.37:27015
Session Affinity:         None
External Traffic Policy:  Cluster
Events:                   <none>

【问题讨论】:

  • 能否提供kubectl describe svc csgo200的输出
  • 服务类型应该是 LoadBalancer 而不是 NodePort。
  • 谢谢,我不认为类型应该是负载均衡器,因为我不希望/也不需要这个用例。另外,负载均衡器不支持这里需要的混合协议。
  • 在主要问题中添加了 kubectl describe 的输出。
  • 它正在侦听每个节点上的 NodePort: 端口(输出中的 31314)。

标签: docker kubernetes yaml


【解决方案1】:

您的服务类型被声明为NodePort,这使您的服务在您的节点上可用。检查service types,我会推荐使用LoadBalancer类型

【讨论】:

  • 据我所知,只有 nodeport 同时支持 tcp 和 udp:github.com/kubernetes/kubernetes/pull/30253
  • @MathieuDuperré 该 PR 的状态是merged,据我所知,kubernetes 处理 UDP 没有问题。如果您仍想使用 NodePort,请检查使用的 TargetPort 是什么,并确保该端口上的节点上没有防火墙
猜你喜欢
  • 2020-01-31
  • 2020-04-11
  • 2021-06-20
  • 1970-01-01
  • 1970-01-01
  • 2018-05-21
  • 2016-12-22
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多