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