برنامه نویسی

CKA Recap — ورود و سیاست شبکه

ورود

  • ورود برای دسترسی خارجی: domain_name:port/path
  • زمینه:
    • rules.ingressClassName
    • path -> مسیر
    • backend.service.name -> خدمات
    • port -> پورت سرویس
    • host -> نام دامنه
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
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

تأیید

1. کنترل کننده ورودی نصب شده را بررسی کنید

k get ingressclass
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

اگر نه، آن را نصب کنید

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
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

2. IP، دامنه، پورت را بررسی کنید

# 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                443/TCP                      35h
ingress-nginx   ingress-nginx-controller             NodePort    10.106.174.82            80:30080/TCP,443:30443/TCP   2m12s
ingress-nginx   ingress-nginx-controller-admission   ClusterIP   10.110.84.81             443/TCP                      2m13s
kube-system     kube-dns                             ClusterIP   10.96.0.10               53/UDP,53/TCP,9153/TCP       35h
world           asia                                 ClusterIP   10.100.146.115           80/TCP                       44s
world           europe                               ClusterIP   10.99.31.152             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
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

توجه: با app svc و ingress svc اشتباه نگیرید. برنامه svc با اپ پاد (در اینجا، به عنوان مثال آسیا) متصل است، سایر پادها می توانند از طریق آن به آن دسترسی داشته باشند svc_ip:svc_port; ingress svc با غلاف کنترل کننده ورودی متصل شده است، اینها در هنگام نصب ورودی ایجاد می شوند ingress-nginx فضای نام غلاف دسترسی خارجی باید از پورت ورودی svc استفاده کند.

3. IP/مسیر ورودی پیچیدگی

# curl domain_name:port/path
controlplane $ curl world.universe.mine:30080/asia
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

NetworkPolicy

  • ترافیک ها را فیلتر کنید
  • زمینه ها:
    • روی غلاف ها عمل کنید:
    • نوع np:
    • منبع جریان ترافیک / غلاف مقصد
      • 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
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

و برچسب ها را پیدا کنید

k get ns --show-labels
k get pod -A --show-labels
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

تأیید

با توجه به قوانین فیلتر، برای بررسی ترافیک، پاد منبع و پاد مقصد را انتخاب کنید

k exec -it pod01 -- curl svc02.ns02.svc.cluster.local
k exec -it test_pod -- curl svc02.ns02.svc.cluster.local
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

نوشته های مشابه

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

دکمه بازگشت به بالا