K8S service networking
Service
把整個application視為一個網路服務,然後以一個對外的service來提供服務。Service可以根據selector來挑出要group的pods,也可以不用selector,然後藉由EndpointSlices動態的將route rule掛上去。
Service有幾種type:
ClusterIP: 預設的選項,如果沒指定IP的話,就會分配一個只有cluster內才能access到的ip。NodePort: 把service bind到node的某個port,可以透過這個方法從cluster外部access service。LoadBalancer: 如果cloud provider支援 external load balancer的話,可以透過這個type產生load balander,然後將流量route進cluster。ExternalName: 將service name用CNAME的方式align到一個domain name,要注意某些protocal(eg: http/https)不支援此種方式。
Ingress
Ingres exposes http/https endpoint,根據設定的route rule把相對應的path或host route到相對應的service上。
如果patyType是ImplementationSpecific的話,確切的行為由ingress-controller處理,例如ingress-nginx,就支援regular expression(Ingress Path Matching)。
Gateway API
Ingres目前已經deprecated,由Gateway API取代。
Gateway API提供了三種API Kind:GatewayClass、Gateway和HTTPRoute。
Network Policies
NetworkPolicy可以根據namespaceSelector或podSelector來對namespace或pod做ingress和egress的設定。