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
的設定。