K8S Network FAQ
- nodePort 会被代理,无法看到真实 IP,可以通过任意节点访问
- hostPort 不一定能被所有 interface 访问
- hostNetwork: true 可以
- 此时要求 containerPort 和 hostPort 相同
- hostNetwork: true 可以
NodePort 端口范围
- 30000–32767
Service 先走本节点 Endpoint
apiVersion: v1
kind: Service
metadata:
name: keydb
annotations:
# Topology Aware Hints
# Kubernetes v1.23 Beta
# 之前为
# service.kubernetes.io/topology-aware-hints
# 值为 Auto|Disabled
# service.kubernetes.io/topology-aware-routing: auto
service.kubernetes.io/topology-mode: Auto
spec:
selector:
app: keydb
ports:
- port: 6379
# Kubernetes v1.21 废弃
topologyKeys:
- 'kubernetes.io/hostname'
- 'kubernetes.io/hostname'
- 'topology.kubernetes.io/zone'
- 'topology.kubernetes.io/region'
- '*'
- Topology Aware Routing
- KEP#2433
- Topology Aware Hints
- Kubernetes v1.23 Beta
Endpoints vs EndpointSlices
- EndpointSlices 替代 Endpoints - v1.21
- Endpoints will be mirrored to EndpointSlices for Services with no spec.selector
默认 IngressClass
kubectl get ingressclasses
kubectl describe ingressclasses nginx
kubectl annotate ingressclasses nginx ingressclass.kubernetes.io/is-default-class=true
ingress does not contain a valid IngressClass
Ingress vs Gateway
- Ingress
- 内容更多 - 包含了 Host 配置和 规则配置
- 只定义了 HTTP Host+Path 规则
- 通常暴露 80 和 443 两个端口
- Gateway - gateway.networking.k8s.io
- 区分了 Gateway 和 HTTPRoute - 打散规则
- Gateway 通过 selector 选择要包含的 HTTPRoute
- Gateway 和 Route 是 对对多 关系
- 例如 一个 dev 一个 test 但使用部分相同 Route
- 可以将 HTTPRoute 的配置下放到开发人员
- 支持非 HTTP 路由
- TLSRoute - 基于 SNI 路由
- TCPRoute, UDPRoute - 基于目标端口路由
- 明确支持透传 HTTPS
- 暴在 80 和 443 之上支持暴露额外端口
LB/Load Balance vs Ingress vs ClusterIP vs API Gateway
- LB/Load Balance - 负载均衡
- 只是一种概念
- 表示聚合了后端多个服务/节点,对外进行统一暴露
- 基本功能
- 上游监控状态监控 - 忽略异常节点/服务
- 轮询
- Ingress - 流量入口
- 能感知 7 层协议的 LB - TCP/UDP/HTTP
- 基于 4 层实现 7 层
- 因为能感知 7 层协议,所以可以支持更多的路由功能
- 基本功能 - 基于 HTTP 协议 Host+Path 的 LB
- 基于 Hots/主机名 路由
- 基于 路径 路由
- TLS Offload
- 常见实现: nginx, haproxy, envoy, traefik
- 能感知 7 层协议的 LB - TCP/UDP/HTTP
- ClusterIP
- 4 层协议的 LB - IP
- 可基于 2 层实现 4 层 - MAC
- 实现虚拟 IP - 该 IP 可以是私有的,也可以是平台提供的公网 IP
- 是一种服务
- 基本功能 - 基于 IP 的 LB
- 4 层协议的 LB - IP