Kubernetes服务没有向80和443以外的其他端口转发



群集设置:

  • OS:Ubuntu 18.04,w/kubernetes建议安装设置
  • 群集用kubespray bootstrant
  • cni是卡利科

快速事实(当Redis服务IP为10.233.90.37时(:

  • 主机:psql 10.233.90.37:6379 =>成功
  • 主机:psql 10.233.90.37:80 =>成功

  • pods(在任何名称空间中( psql 10.233.90.37:6379 => timeout

  • pods(在任何名称空间中( psql redis:6379 => timeout
  • pods(在任何名称空间中( psql redis.namespace.svc.cluster.local => timeout
  • pods(在任何名称空间中( psql redis:80 =>成功
  • pods(在任何名称空间中( psql redis.namespace.svc.cluster.local:80 =>成功

kubernetes服务(nodeport,loadbalancer,clusterip(对于Pods而言,将不向80和443以外的其他端口转发端口。POD端口可能会有所不同,但是如果服务端口不是80或443。

在80和443工作以外的端口上,请求从主机机器到Kubernetes服务。但是从PODS到其他端口的请求失败。

从PODS到港口80和443上的服务的请求。

user@host: curl 10.233.90.37:80
200 OK
user@host: curl 10.233.90.37:5432
200 OK
# ... exec into Pod
```bash
bash-4.4# curl 10.233.90.37:80
200 OK
bash-4.4# curl 10.233.90.37:5432
Error ... timeout ...
user@host: kubectl get NetworkPolicy -A
No resources found.
user@host: kubectl get PodSecurityPolicy -A
No resources found.

示例服务:

apiVersion: v1
kind: Service
metadata:
  labels:
    app: redis
  name: redis
  namespace: namespace
spec:
  ports:
  - port: 6379
    protocol: TCP
    targetPort: 6379
    name: redis
  - port: 80
    protocol: TCP
    targetPort: 6379
    name: http
  selector:
    app: redis
  type: NodePort # I've tried ClusterIP, NodePort, and LoadBalancer

这个疯狂的kubernetes服务端口行为是怎么回事!?

调试后,我发现它可能与ufw和iptables配置有关。

UFW设置(非常宽松(:

Status: enabled
80                         ALLOW       Anywhere
443                        ALLOW       Anywhere
6443                       ALLOW       Anywhere
2379                       ALLOW       Anywhere
2380                       ALLOW       Anywhere
10250/tcp                  ALLOW       Anywhere
10251/tcp                  ALLOW       Anywhere
10252/tcp                  ALLOW       Anywhere
10255/tcp                  ALLOW       Anywhere
179                        ALLOW       Anywhere
5473                       ALLOW       Anywhere
4789                       ALLOW       Anywhere
10248                      ALLOW       Anywhere
22                         ALLOW       Anywhere
80 (v6)                    ALLOW       Anywhere (v6)
443 (v6)                   ALLOW       Anywhere (v6)
6443 (v6)                  ALLOW       Anywhere (v6)
2379 (v6)                  ALLOW       Anywhere (v6)
2380 (v6)                  ALLOW       Anywhere (v6)
10250/tcp (v6)             ALLOW       Anywhere (v6)
10251/tcp (v6)             ALLOW       Anywhere (v6)
10252/tcp (v6)             ALLOW       Anywhere (v6)
10255/tcp (v6)             ALLOW       Anywhere (v6)
179 (v6)                   ALLOW       Anywhere (v6)
5473 (v6)                  ALLOW       Anywhere (v6)
4789 (v6)                  ALLOW       Anywhere (v6)
10248 (v6)                 ALLOW       Anywhere (v6)
22 (v6)                    ALLOW       Anywhere (v6)

kubespray部署因禁用UFW而失败。kubespray部署通过启用UFW成功。

一旦部署,禁用UFW将允许Pods在80、443以外的其他端口上连接。但是,禁用UFW时群集崩溃。

知道发生了什么事吗?我是否缺少UFW Config ....?Kubespray install需要取得成功似乎很奇怪。

LoadBalancer服务揭示了1个外部IP,外部客户或用户将用来与您的应用联系。在大多数情况下,您希望您的LoadBalancer服务在端口80上侦听HTTP流量和HTTPS端口443。因为您希望您的用户键入http://yourapp.comhttps://yourapp.com而不是http://yourapp.com:3000

看来您正在混合示例服务中的不同服务yaml,例如当服务类型NodePort时,使用nodePort。您可以尝试:

apiVersion: v1
kind: Service
metadata:
  labels:
    app: redis
    role: master
    tier: backend
  name: redis
spec:
  ports:
  - port: 80
    protocol: TCP
    targetPort: 6379    // service will target containers on port 6379
    name: someName
  selector:
    app: redis
    role: master
    tier: backend
  type: LoadBalancer

相关内容

  • 没有找到相关文章

最新更新