DEV Community

Cheedge Lee
Cheedge Lee

Posted on • Originally published at Medium

CKA Recap -- Ingress & NetworkPolicy

Ingress

  • ingress to make external to access: domain_name:port/path
  • Field:
    • rules.ingressClassName
    • path -> path
    • backend.service.name -> service
    • port -> service port
    • host -> domain name
apiVersion: networking.k8s.io/v1 kind: Ingress metadata: name: ingress-wildcard-host annotations: nginx.ingress.kubernetes.io/rewrite-target: / spec: ingressClassName: nginx # used for ingress controller rules: - host: "foo.bar.com" http: paths: - pathType: Prefix path: "/bar" # http://domain/path backend: service: name: service1 # svc port: number: 80 # svc port - host: "*.foo.com" http: paths: - pathType: Prefix path: "/foo" backend: service: name: service2 port: number: 80 
Enter fullscreen mode Exit fullscreen mode

Verification

1. check ingress controller installed

k get ingressclass 
Enter fullscreen mode Exit fullscreen mode

if not, install it

helm repo add ingress-nginx https://kubernetes.github.io/ingress-nginx helm repo update helm install my-nginx-ingress ingress-nginx/ingress-nginx -n ingress-nginx --create-namespace 
Enter fullscreen mode Exit fullscreen mode

2. check IP, domain, port

# 1. check port # svc asia|europe is bound with pod # svc ingress-nginx-controller bound with ingress-controller pod # and the target_port:port is 80:30080, so access port is 30080 controlplane $ k get svc -A NAMESPACE NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE default kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 35h ingress-nginx ingress-nginx-controller NodePort 10.106.174.82 <none> 80:30080/TCP,443:30443/TCP 2m12s ingress-nginx ingress-nginx-controller-admission ClusterIP 10.110.84.81 <none> 443/TCP 2m13s kube-system kube-dns ClusterIP 10.96.0.10 <none> 53/UDP,53/TCP,9153/TCP 35h world asia ClusterIP 10.100.146.115 <none> 80/TCP 44s world europe ClusterIP 10.99.31.152 <none> 80/TCP 45s # 2. find IP (endpoint -> ingress) controlplane $ k get endpoints NAME ENDPOINTS AGE kubernetes 172.30.1.2:6443 35h controlplane $ k get ing -owide -A NAMESPACE NAME CLASS HOSTS ADDRESS PORTS AGE world world nginx world.universe.mine 172.30.1.2 80 63s # 3. check domain (if not, append it) controlplane $ cat /etc/hosts 127.0.0.1 localhost 127.0.0.1 ubuntu 127.0.0.1 host01 127.0.0.1 controlplane 172.30.1.2 world.universe.mine 
Enter fullscreen mode Exit fullscreen mode

Notice: don't confused with the app svc and the ingress svc. The app svc is bound with app pod (here, for example asia), other pod can access it via svc_ip:svc_port; ingress svc is bound with ingress controller pod, these create during the ingress installation in ingress-nginx namespace. Exteranl access pod should use the ingress svc port.

3. curl ingress IP/path

# curl domain_name:port/path controlplane $ curl world.universe.mine:30080/asia 
Enter fullscreen mode Exit fullscreen mode

NetworkPolicy

  • filter the traffics
  • Fields:
    • act on pods:
      • namespace
      • podSelector
    • np type:
      • ingress.from & egress.to
    • traffic flow source/destination pods
      • namespaceSelector
      • podSelector
      • ports
apiVersion: networking.k8s.io/v1 kind: NetworkPolicy metadata: name: test-network-policy namespace: default # set act on pod ns label spec: podSelector: matchLabels: role: db # set act on pod label policyTypes: - Ingress - Egress ingress: - from: - ipBlock: cidr: 172.17.0.0/16 except: - 172.17.1.0/24 - namespaceSelector: matchLabels: project: myproj # set src/dst pods ns label - podSelector: matchLabels: role: frontend # set src/dst pods label ports: - protocol: TCP port: 6379 egress: - to: - ipBlock: cidr: 10.0.0.0/24 ports: - protocol: TCP port: 5978 # set filter port 
Enter fullscreen mode Exit fullscreen mode

and find labels

k get ns --show-labels k get pod -A --show-labels 
Enter fullscreen mode Exit fullscreen mode

Verification

According to the filter rules, choose the source pod and destination pod, to check traffic

k exec -it pod01 -- curl svc02.ns02.svc.cluster.local k exec -it test_pod -- curl svc02.ns02.svc.cluster.local 
Enter fullscreen mode Exit fullscreen mode

Top comments (0)