OpenShift - Temel Konsept

Uygulamaların fiili kurulumuna ve dağıtımına başlamadan önce, OpenShift V3'te kullanılan bazı temel terimleri ve kavramları anlamamız gerekir.

Kaplar ve Görseller

Görüntüler

Bunlar, Docker görüntülerinden oluşan OpenShift'in temel yapı taşlarıdır. OpenShift'teki her bölmede, kümenin içinde çalışan kendi görüntüleri vardır. Bir bölmeyi yapılandırdığımızda, kayıt defterinden havuza alınacak bir alanımız olur. Bu yapılandırma dosyası görüntüyü çekecek ve küme düğümünde konuşlandıracaktır.

apiVersion: v1
kind: pod
metadata:
   name: Tesing_for_Image_pull -----------> Name of Pod
      spec:
containers:
- name: neo4j-server ------------------------> Name of the image
image: <Name of the Docker image>----------> Image to be pulled
imagePullPolicy: Always ------------->Image pull policy
command: [“echo”, “SUCCESS”] -------------------> Massage after image pull

Bundan bir görüntü çekmek ve oluşturmak için aşağıdaki komutu çalıştırın. OC, oturum açtıktan sonra OpenShift ortamı ile iletişim kuran istemcidir.

$ oc create –f Tesing_for_Image_pull

Konteyner

Bu, Docker görüntüsü OpenShift kümesinde konuşlandırıldığında oluşturulur. Herhangi bir konfigürasyonu tanımlarken konfigürasyon dosyasında konteyner bölümünü tanımlıyoruz. Bir konteynerin içinde çalışan birden çok görüntü olabilir ve küme düğümünde çalışan tüm kapsayıcılar OpenShift Kubernetes tarafından yönetilir.

spec:
   containers:
   - name: py ------------------------> Name of the container
   image: python----------> Image going to get deployed on container
   command: [“python”, “SUCCESS”]
   restartPocliy: Never --------> Restart policy of container

Aşağıda, içinde çalışan birden çok görüntüye sahip bir kabın tanımlanması için spesifikasyonlar verilmiştir.

apiVersion: v1
kind: Pod
metadata:
   name: Tomcat
spec:
   containers:
   - name: Tomcat
   image: tomcat: 8.0
   ports:
   - containerPort: 7500
      imagePullPolicy: Always
      -name: Database
      Image: mongoDB
      Ports:
      - containerPort: 7501
imagePullPolicy: Always

Yukarıdaki konfigürasyonda, içinde Tomcat ve MongoDB'nin iki görüntüsünün bulunduğu çoklu kapsayıcılı bir pod tanımladık.

Kapsüller ve Hizmetler

Kapsüller

Kapsül, bir konteyner koleksiyonu ve OpenShift (Kubernetes) kümesinin bir düğümü içindeki depolaması olarak tanımlanabilir. Genel olarak, tek bir kapsayıcıdan başlayıp çoklu kapsayıcılı bölmeye kadar iki tür bölmeye sahibiz.

Single Container Pod - Bunlar OC komutuyla veya temel bir yapılandırma yml dosyasıyla kolayca oluşturulabilir.

$ oc run <name of pod> --image = <name of the image from registry>

Aşağıdaki gibi basit bir yaml dosyasıyla oluşturun.

apiVersion: v1
kind: Pod
metadata:
   name: apache
spec:
   containers:
   - name: apache
   image: apache: 8.0
   ports:
      - containerPort: 7500
imagePullPolicy: Always

Yukarıdaki dosya oluşturulduktan sonra, aşağıdaki komutla bir bölme oluşturacaktır.

$ oc create –f apache.yml

Multi-Container Pod- Çok konteynerli kapsüller, içinde çalışan birden fazla konteynerimiz olanlardır. Aşağıdaki gibi yaml dosyaları kullanılarak oluşturulurlar.

apiVersion: v1
kind: Pod
metadata:
   name: Tomcat
spec:
   containers:
   - name: Tomcat
   image: tomcat: 8.0
   ports:
      - containerPort: 7500
imagePullPolicy: Always
   -name: Database
   Image: mongoDB
   Ports:
      - containerPort: 7501
imagePullPolicy: Always

Bu dosyaları oluşturduktan sonra, bir konteyner oluşturmak için yukarıdaki ile aynı yöntemi kullanabiliriz.

Service- Bir kapsülün içinde çalışan bir dizi konteynerimiz olduğu için, aynı şekilde mantıksal bir kapsül kümesi olarak tanımlanabilecek bir hizmetimiz var. Bölmenin üzerinde, bölmelere erişilebilen tek bir IP ve DNS adı sağlayan soyut bir katmandır. Hizmet, yük dengeleme yapılandırmasını yönetmeye ve bölmeyi çok kolay bir şekilde ölçeklendirmeye yardımcı olur. OpenShift'te bir hizmet, yeni bir örnek oluşturmak için OpenShift master'daki apiService'e tanımlanabilen bir REST nesnesidir.

apiVersion: v1
kind: Service
metadata:
   name: Tutorial_point_service
spec:
   ports:
      - port: 8080
         targetPort: 31999

Derlemeler ve Akışlar

Yapılar

OpenShift'te derleme, görüntüleri kaplara dönüştürme işlemidir. Kaynak kodunu bir görüntüye dönüştüren işlemdir. Bu derleme süreci, kaynak koddan görüntüye önceden tanımlanmış strateji üzerinde çalışır.

Derleme birden çok stratejiyi ve kaynağı işler.

Stratejiler Oluşturun

  • Source to Image- Bu temelde, yeniden üretilebilir görüntüler oluşturmaya yardımcı olan bir araçtır. Bu görüntüler her zaman Docker run komutunu kullanarak çalışmaya hazır bir aşamadadır.

  • Docker Build - Bu, basit Docker build komutunu çalıştırarak görüntülerin Docker dosyası kullanılarak oluşturulduğu işlemdir.

  • Custom Build - Bunlar, temel Docker görüntüleri oluşturmak için kullanılan yapılardır.

Kaynak Oluşturun

Git- Bu kaynak, git deposu görüntü oluşturmak için kullanıldığında kullanılır. Dockerfile isteğe bağlıdır. Kaynak koddaki konfigürasyonlar aşağıdaki gibi görünür.

source:
type: "Git"
git:
   uri: "https://github.com/vipin/testing.git"
   ref: "master"
contextDir: "app/dir"
dockerfile: "FROM openshift/ruby-22-centos7\nUSER example"

Dockerfile - Dockerfile, yapılandırma dosyasında bir girdi olarak kullanılır.

source:
   type: "Dockerfile"
   dockerfile: "FROM ubuntu: latest
   RUN yum install -y httpd"

Image Streams- Görüntüler çekildikten sonra görüntü akışları oluşturulur. Bir görüntü akışının avantajı, bir görüntünün yeni sürümüyle ilgili güncellemeleri aramasıdır. Bu, etiketler tarafından tanımlanan herhangi bir sayıda Docker biçimli kapsayıcı görüntüsünü karşılaştırmak için kullanılır.

Görüntü akışları, yeni bir görüntü oluşturulduğunda otomatik olarak bir eylem gerçekleştirebilir. Tüm yapılar ve konuşlandırmalar, görüntü eylemini izleyebilir ve buna göre bir eylem gerçekleştirebilir. Aşağıda bir akış oluşturmayı nasıl tanımladığımız anlatılmaktadır.

apiVersion: v1
kind: ImageStream
metadata:
   annotations:
      openshift.io/generated-by: OpenShiftNewApp
   generation: 1
   labels:
      app: ruby-sample-build
   selflink: /oapi/v1/namespaces/test/imagestreams/origin-ruby-sample
   uid: ee2b9405-c68c-11e5-8a99-525400f25e34
spec: {}
status:
   dockerImageRepository: 172.30.56.218:5000/test/origin-ruby-sample
   tags:
   - items:
      - created: 2016-01-29T13:40:11Z
      dockerImageReference: 172.30.56.218:5000/test/origin-apache-sample
      generation: 1
      image: vklnld908.int.clsa.com/vipin/test
   tag: latest

Rotalar ve Şablonlar

Rotalar

OpenShift'te yönlendirme, harici olarak erişilebilir ana bilgisayar adı oluşturup yapılandırarak hizmeti dış dünyaya gösterme yöntemidir. Rotalar ve uç noktalar, hizmeti, kullanıcının tanımlı uygulamaya erişmek için ad bağlantısını (DNS) kullanabileceği dış dünyaya göstermek için kullanılır.

OpenShift'te yollar, OpenShift yöneticisi tarafından kümede dağıtılan yönlendiriciler kullanılarak oluşturulur. Yönlendiriciler, HTTP (80) ve https (443) bağlantı noktalarını harici uygulamalara bağlamak için kullanılır.

Rotalar tarafından desteklenen farklı protokol türleri aşağıdadır -

  • HTTP
  • HTTPS
  • TSL ve web soketi

Hizmeti yapılandırırken, hizmeti yapılandırmak ve bu hizmeti kullanarak uç noktayı bulmak için seçiciler kullanılır. Aşağıda, bir hizmeti nasıl oluşturduğumuza ve uygun bir protokol kullanarak bu hizmet için yönlendirmeye bir örnek verilmiştir.

{
   "kind": "Service",
   "apiVersion": "v1",
   "metadata": {"name": "Openshift-Rservice"},
   "spec": {
      "selector": {"name":"RService-openshift"},
      "ports": [
         {
            "protocol": "TCP",
            "port": 8888,
            "targetPort": 8080
         }
      ]
   }
}

Ardından, aşağıdaki komutu çalıştırın ve hizmet oluşturulur.

$ oc create -f ~/training/content/Openshift-Rservice.json

Hizmet, oluşturulduktan sonra böyle görünüyor.

$ oc describe service Openshift-Rservice

Name:              Openshift-Rservice
Labels:            <none>
Selector:          name = RService-openshift
Type:              ClusterIP
IP:                172.30.42.80
Port:              <unnamed> 8080/TCP
Endpoints:         <none>
Session Affinity:  None
No events.

Aşağıdaki kodu kullanarak servis için bir yönlendirme oluşturun.

{
   "kind": "Route",
   "apiVersion": "v1",
   "metadata": {"name": "Openshift-service-route"},
   "spec": {
      "host": "hello-openshift.cloudapps.example.com",
      "to": {
         "kind": "Service",
         "name": "OpenShift-route-service"
      },
      "tls": {"termination": "edge"}
   }
}

Bir rota oluşturmak için OC komutu kullanıldığında, yeni bir rota kaynağı örneği oluşturulur.

Şablonlar

Şablonlar, OpenShift'te birden çok kez kullanılabilen standart bir nesne olarak tanımlanır. Birden çok nesne oluşturmak için kullanılan yer tutucular listesiyle parametreleştirilmiştir. Bu, kullanıcıların oluşturma yetkisine sahip olduğu bir bölmeden ağ oluşturmaya kadar her şeyi oluşturmak için kullanılabilir. Görüntüdeki CLI veya GUI arayüzünden şablon proje dizinine yüklenirse, nesnelerin bir listesi oluşturulabilir.

apiVersion: v1
kind: Template
metadata:
   name: <Name of template>
   annotations:
      description: <Description of Tag>
      iconClass: "icon-redis"
      tags: <Tages of image>
objects:
   - apiVersion: v1
   kind: Pod
   metadata:
      name: <Object Specification>
spec:
   containers:
      image: <Image Name>
      name: master
      ports:
      - containerPort: <Container port number>
         protocol: <Protocol>
labels:
   redis: <Communication Type>

Kimlik doğrulama ve yetkilendirme

Doğrulama

OpenShift'te, ana ve istemci yapısını yapılandırırken, ana birim, OAuth sunucusunun yerleşik bir özelliği ile gelir. OAuth sunucusu, API kimlik doğrulaması için kullanılan jeton oluşturmak için kullanılır. OAuth, ana makine için varsayılan bir kurulum olarak geldiğinden, varsayılan olarak kullanılan Tümüne İzin Ver kimlik sağlayıcısına sahibiz. Yapılandırılabilen farklı kimlik sağlayıcıları mevcuttur/etc/openshift/master/master-config.yaml.

OAuth'ta bulunan farklı türde kimlik sağlayıcıları vardır.

  • Hepsine izin ver
  • Hepsini inkar etmek
  • HTPasswd
  • LDAP
  • Temel Kimlik Doğrulama

Hepsine izin ver

apiVersion: v1
   kind: Pod
   metadata:
      name: redis-master
   spec:
      containers:
         image: dockerfile/redis
         name: master
      ports:
      - containerPort: 6379
         protocol: TCP
      oauthConfig:
      identityProviders:
      - name: my_allow_provider
         challenge: true
         login: true
      provider:
         apiVersion: v1
         kind: AllowAllPasswordIdentityProvider

Hepsini inkar etmek

apiVersion: v1
kind: Pod
metadata:
   name: redis-master
spec:
   containers:
      image: dockerfile/redis
   name: master
   ports:
   - containerPort: 6379
      protocol: TCP
   oauthConfig:
   identityProviders:
   - name: my_allow_provider
      challenge: true
      login: true
   provider:
      apiVersion: v1
      kind: DenyAllPasswordIdentityProvider

HTPasswd

HTPasswd'yi kullanmak için, önce ana makinede Httpd-araçlarını kurmamız ve sonra bunu diğerleri için yaptığımız gibi yapılandırmamız gerekir.

identityProviders:
   - name: my_htpasswd_provider
      challenge: true
      login: true
      provider:
         apiVersion: v1
         kind: HTPasswdPasswordIdentityProvider

yetki

Yetkilendirme, bir kullanıcıyı doğrulamak için kullanılan bir OpenShift ana özelliğidir. Bu, kullanıcının belirli bir projede bu eylemi gerçekleştirmeye yetkili olup olmadığını görmek için bir eylemi gerçekleştirmeye çalışan kullanıcıyı kontrol ettiği anlamına gelir. Bu, yöneticinin projelere erişimi kontrol etmesine yardımcı olur.

Yetkilendirme politikaları şu şekilde kontrol edilir -

  • Rules
  • Roles
  • Bindings

Yetkilendirmenin değerlendirilmesi şu şekilde yapılır -

  • Identity
  • Action
  • Bindings

Politikaları Kullanma -

  • Küme politikası
  • Yerel politika