群集设置:
- 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.com
或https://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