Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Kubernetes networks #5

Merged
merged 2 commits into from
Jun 26, 2020
Merged

Kubernetes networks #5

merged 2 commits into from
Jun 26, 2020

Conversation

xom4ek
Copy link
Collaborator

@xom4ek xom4ek commented Jun 25, 2020

xom4ek_platform

xom4ek Platform repository

Выполнено ДЗ №4

  • Основное ДЗ
  • Задание со *

В процессе сделано:

  • Добавлены и изучены механизмы liveness и readiness probe

Дополнительно они описанны по ссылке

readinessProbe:
  httpGet:
    path: /index.html
    port: 8000
livenessProbe:
  tcpSocket:
    port: 8000
  • Создали несколько типов services

    Дополнительно про endpoints можно почитать тут

  • Установлен MetalLB / Ingress / законфигурирован minikube длля использования IPVS

    • Настройка использования IPVS
    ### move strictARP to true and mode to IPVS
    kubectl get configmap kube-proxy -n kube-system -o yaml | \
    sed -e 's/strictARP: false/strictARP: true/' | \
    sed -e 's/mode: ""/mode: "ipvs"/' | \
    kubectl apply -f - -n kube-system
    
    ### recreate pods kube-proxy
    kubectl --namespace kube-system delete pod --selector='k8s-app=kube-proxy'
    export VERSION_MLB=v0.9.3
    kubectl apply -f https://raw.githubusercontent.com/metallb/metallb/$VERSION_MLB/manifests/namespace.yaml
    kubectl apply -f https://raw.githubusercontent.com/metallb/metallb/$VERSION_MLB/manifests/metallb.yaml
    # On first install only
    kubectl create secret generic -n metallb-system memberlist --from-literal=secretkey="$(openssl rand -base64 128)"
    kubectl apply -f https://raw.githubusercontent.com/kubernetes/ingress-nginx/master/deploy/static/provider/baremetal/deploy.yaml
  • ⭐ Сделан сервис LoadBalancer , который откроет доступ к CoreDNS снаружи кластера

    Использование разных протоколов в одном service с типом LoadBalancing запрещено пока не реализовано, поэтому не получится использовать один service.
    Необходимо использовать annotation MetalLB metallb.universe.tf/allow-shared-ip, что позволит двум Service с разными протоколами маршрутизироваться по одному внешнему IP.

  • Создан service с внешним IP выданным MetalLB для использования под ingress + headless сервис

    Service для Ingress

    spec:
      externalTrafficPolicy: Local
      type: LoadBalancer
      selector:
        app.kubernetes.io/name: ingress-nginx

    Headless

    type: ClusterIP
    clusterIP: None

    Ну и пример правила для ingress

    spec:
      rules:
      - http:
          paths:
          - path: /web
            backend:
              serviceName: web-svc
              servicePort: 8000

    Дополнительно про spec можно почитать тут

  • ⭐ Создан ingress для kubernetes dashobard для доступа за /dashbaord

    Были использованы стандартные аннотации nginx-ingress:

    Важный кусок

    annotations:
      nginx.ingress.kubernetes.io/rewrite-target: /$1
    ...
    - path: /dashboard/(.*)

    B для того чтобы работало dashboard без /

    annotations:
      nginx.ingress.kubernetes.io/permanent-redirect: /dashboard/
    ...
    - path: /dashboard$
  • ⭐ Создан ingress с конфигурацией под канареечное развертывание

    Общее описание Canary для ingress-nginx тут
    Использовались anotations:

    • nginx.ingress.kubernetes.io/canary
    • nginx.ingress.kubernetes.io/canary-by-header
    • nginx.ingress.kubernetes.io/canary-by-header-value

    Без конкретного hostname в ingress ничего не работало, хочется понять почему.

Как запустить проект:

git clone https://github.com/otus-kuber-2020-04/xom4ek_platform.git && \
cd xom4ek_platform && \
git checkout kubernetes-networks && \
cd kubernetes-networks && prepare/install.sh

Как проверить работоспособность:

  • ⭐ coredns:
nslookup kubernetes.default.svc.cluster.local 172.17.255.10
  • ⭐ ingress for Dashboard:
curl -L $(kubectl get svc ingress-nginx -n ingress-nginx -o jsonpath='{.status.loadBalancer.ingress[0].ip}')/dashboard
  • ⭐ canary ingress
curl -s --resolve example.com:80:kubectl get svc ingress-nginx -n ingress-nginx -o jsonpath='{.status.loadBalancer.ingress[0].ip}' example.com:80/canary | grep -v '>'

curl -s --resolve example.com:80:kubectl get svc ingress-nginx -n ingress-nginx -o jsonpath='{.status.loadBalancer.ingress[0].ip}' -H "canary:catch" example.com:80/canary | grep -v '>'

PR checklist:

  • Выставлен label с темой домашнего задания

@xom4ek
Copy link
Collaborator Author

xom4ek commented Jun 25, 2020

Почему без явного указания hostname nginx-ingress не маршрутизирует по headerу canary?
В офф доках как то не нашел.

Так же не очень понятно почему в dashboard конструкт типа /dashboard(/|$)(.*) не отрабатывал когда в строку передавался dasboard (без /)

@Jasstkn Jasstkn self-requested a review June 26, 2020 13:30
@Jasstkn Jasstkn assigned Jasstkn and unassigned express42-bot Jun 26, 2020
@Jasstkn Jasstkn added the (⭐) label Jun 26, 2020
Copy link
Contributor

@Jasstkn Jasstkn left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Добрый день! Отлично выполнили домашнее задание :) Спасибо за подробный ридми, особенно понравились html странички для кенери :D Конечно же аппрув и удачи со следующими домашками!

@Jasstkn Jasstkn merged commit ef63604 into master Jun 26, 2020
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

Successfully merging this pull request may close these issues.

3 participants