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

Add storage, network policy and ingress support to the Kubernetes #17

Merged
merged 17 commits into from
Dec 11, 2017

Conversation

jugatsu
Copy link
Owner

@jugatsu jugatsu commented Dec 10, 2017

PR к ДЗ №30

Добавил манифест-файлы для конфигурации следующих компонентов Kubernetes:

  1. Network Policy
  2. Storage
  3. Ingress-контроллера

Ниже подробнее.

Реорганизовал структуру директории kubernetes. Теперь манифесты расположенные в отдельных директориях:

├── app
├── dashboard.yaml
├── ingress
├── namespace
├── netpol
├── secrets
└── storage

И соответственно app/:

app
├── deployment
│   ├── comment.yaml
│   ├── mongo.yaml
│   ├── post.yaml
│   └── ui.yaml
└── service
    ├── comment.yaml
    ├── mongodb.yaml
    ├── post.yaml
    └── ui.yaml

Для развертывания используется ключ -R для рекурсии:

$ kubectl apply -f storage/ -R
$ kubectl apply -f app/ -R

Network Policy

  1. Добавил опцию Network Policy в конфигурацию terraform. Сделал включение Network Policy опциональным при помощи ternary оператора, по дефолту она выключена.
network_policy {
    provider = "CALICO"
    enabled  = "${var.gke_network_policy ? 1 : 0}"
  }
  1. Добавил конфигурацию для всех микросервисов. Манифест-файлы находятся в директории netpol/.

Подам разрешено только ходить по определённым портам. Проверял с использованием nmap.

Ниже пример comment --> post до включения и после:

$ kubectl exec -it comment-676db49d44-zv2pg sh
/app # apk add --no-cache nmap
/app # nmap post -Pn -p 5000
Starting Nmap 7.40 ( https://nmap.org ) at 2017-12-09 08:44 UTC
Nmap scan report for post (10.47.251.61)
Host is up (0.00012s latency).
rDNS record for 10.47.251.61: post.default.svc.cluster.local
PORT     STATE SERVICE
5000/tcp open  upnp

Nmap done: 1 IP address (1 host up) scanned in 0.27 seconds
$ kubectl apply -f app/netpol/

/app # nmap post -Pn -p 5000

Starting Nmap 7.40 ( https://nmap.org ) at 2017-12-09 08:45 UTC
Nmap scan report for post (10.47.251.61)
Host is up.
rDNS record for 10.47.251.61: post.default.svc.cluster.local
PORT     STATE    SERVICE
5000/tcp filtered upnp
  1. Пришлось сменить тип виртуальных машин на n1-standard-2. Иначе не хватало ресурсов

Storage

Вся конфигурация стораджа находится в директории storage/

Ingress

  1. Для примера манифест-файл для объекта Secret создан в директории secrets/. Для создания использовал хак)
kubectl create secret tls ui-ingress --cert=tls.crt --key=tls.key --dry-run -o yaml > ui-ingress.yaml

Возможность шифрования не прорабатывал ) Вот интересный проект https://github.com/shyiko/kubesec

  1. Также экспериментально добавил в kebernetes настройку tls-сертификатов и объекта Secret.
// Ensure secret with tls keys for ingress is created
resource "kubernetes_secret" "ingress" {
  metadata {
    name = "ui-ingress"
  }

  data {
    tls.key = "${tls_private_key.ingress.private_key_pem}"
    tls.crt = "${tls_locally_signed_cert.ingress.cert_pem}"
  }

  type       = "kubernetes.io/tls"
  depends_on = ["google_container_cluster.cluster"]
}

Остановился лишь на создании сертификатов с произвольными CN и т.д.
2017-12-10 14 34 27

Но схема рабочая полностью. Единственно, что при первом terraform apply, нужно выполнить:

terraform apply --target=google_container_cluster.cluster

Затем уже штатный terraform apply. Это связано с тем, что провайдер Kubernetes при первом apply ничего не знает про кластер hashicorp/terraform#14073 (comment)

@jugatsu jugatsu changed the title WIP: Add storage and ingress support to the Kubernetes Add storage, network policy and ingress support to the Kubernetes Dec 10, 2017
@jugatsu jugatsu requested review from vitkhab, chromko and Nklya December 10, 2017 15:42
@jugatsu
Copy link
Owner Author

jugatsu commented Dec 10, 2017

/сс @vitkhab @chromko @Nklya

@jugatsu
Copy link
Owner Author

jugatsu commented Dec 10, 2017

README.md сделаю после последнего дз по Kubernetes)

@chromko
Copy link
Collaborator

chromko commented Dec 11, 2017

Работа выполнена круто. Единственное - я думаю, не стоит разбивать директории по типам ресурсов deployment/service/ingress/etc. Лучше по самим приложениям comment/post/ui.
Тогда очевидны зависимости конкретного приложения в k8s. (грубо говоря структура helm-чарта уже образована).

@jugatsu
Copy link
Owner Author

jugatsu commented Dec 11, 2017

По разбивке понял, спасибо 👍

В следующем дз исправим)

@jugatsu jugatsu merged commit b227848 into master Dec 11, 2017
@jugatsu jugatsu deleted the kubernetes-3 branch December 11, 2017 15:35
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.

2 participants