OpenShift - 基本概念



在開始實際的應用程式設定和部署之前,我們需要了解 OpenShift V3 中使用的一些基本術語和概念。

容器和映象

映象

這些是 OpenShift 的基本構建塊,由 Docker 映象構成。在 OpenShift 上的每個 Pod 中,叢集都有自己的映象在其內部執行。當我們配置 Pod 時,我們有一個欄位將從登錄檔中提取。此配置檔案將拉取映象並在叢集節點上部署它。

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

為了拉取並從中建立映象,請執行以下命令。OC 是登入後與 OpenShift 環境通訊的客戶端。

$ oc create –f Tesing_for_Image_pull

容器

當 Docker 映象部署到 OpenShift 叢集上時,就會建立此容器。在定義任何配置時,我們在配置檔案中定義容器部分。一個容器可以有多個映象在其中執行,並且叢集節點上執行的所有容器都由 OpenShift Kubernetes 管理。

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

以下是定義一個包含多個映象在其中執行的容器的規範。

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

在上面的配置中,我們定義了一個多容器 Pod,其中包含 Tomcat 和 MongoDB 的兩個映象。

Pod 和服務

Pod

Pod 可以定義為 OpenShift(Kubernetes)叢集節點中容器及其儲存的集合。一般來說,我們有兩種型別的 Pod,從單個容器 Pod 到多容器 Pod。

單容器 Pod - 這些可以透過 OC 命令或基本配置 yml 檔案輕鬆建立。

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

使用以下簡單的 yaml 檔案建立它。

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

建立上述檔案後,它將使用以下命令生成一個 Pod。

$ oc create –f apache.yml

多容器 Pod - 多容器 Pod 是那些在一個 Pod 中執行多個容器的 Pod。它們是使用 yaml 檔案建立的,如下所示。

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

建立這些檔案後,我們可以簡單地使用與上面相同的方法來建立容器。

服務 - 正如我們在 Pod 中執行著一組容器一樣,同樣地,我們有一個服務,可以將其定義為 Pod 的邏輯集合。它是 Pod 之上的一個抽象層,它提供一個單一的 IP 和 DNS 名稱,透過該名稱可以訪問 Pod。服務有助於管理負載均衡配置並非常輕鬆地擴充套件 Pod。在 OpenShift 中,服務是一個 REST 物件,其定義可以釋出到 OpenShift 主節點上的 apiService 以建立新例項。

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

構建和流

構建

在 OpenShift 中,構建是將映象轉換為容器的過程。它是將原始碼轉換為映象的過程。此構建過程基於預定義的策略將原始碼構建為映象。

構建過程使用多種策略和來源。

構建策略

  • 源到映象 - 這基本上是一個工具,有助於構建可複製的映象。這些映象始終處於可以使用 Docker run 命令執行的準備就緒狀態。

  • Docker 構建 - 這是使用 Dockerfile 透過執行簡單的 Docker build 命令構建映象的過程。

  • 自定義構建 - 這些是用於建立基本 Docker 映象的構建。

構建來源

Git - 當使用 git 倉庫構建映象時,使用此來源。Dockerfile 是可選的。原始碼中的配置如下所示。

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 用作配置檔案中的輸入。

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

映象流 - 拉取映象後建立映象流。映象流的優勢在於它會查詢映象新版本的更新。這用於比較由標籤標識的任意數量的 Docker 格式容器映象。

映象流可以在建立新映象時自動執行操作。所有構建和部署都可以監視映象操作並相應地執行操作。以下是我們如何定義構建流。

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

路由和模板

路由

在 OpenShift 中,路由是一種透過建立和配置外部可訪問的主機名來將服務公開給外部世界的方法。路由和端點用於將服務公開給外部世界,使用者可以從中使用名稱連線(DNS)來訪問定義的應用程式。

在 OpenShift 中,路由是透過使用路由器建立的,這些路由器由 OpenShift 管理員在叢集上部署。路由器用於將 HTTP(80)和 https(443)埠繫結到外部應用程式。

以下是路由支援的不同型別的協議 -

  • HTTP
  • HTTPS
  • TSL 和 Web Socket

在配置服務時,選擇器用於配置服務並使用該服務查詢端點。以下是如何使用適當的協議建立服務及其路由的示例。

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

接下來,執行以下命令,服務將被建立。

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

這是建立後服務的顯示。

$ 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.

使用以下程式碼為服務建立路由。

{
   "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"}
   }
}

當使用 OC 命令建立路由時,將建立路由資源的新例項。

模板

模板在 OpenShift 中被定義為一個標準物件,可以多次使用。它使用用於建立多個物件的佔位符列表進行引數化。這可以用於建立任何東西,從 Pod 到網路,使用者有權建立。如果來自 CLI 或 GUI 介面中的映象的模板上傳到專案目錄,則可以建立物件列表。

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>

身份驗證和授權

身份驗證

在 OpenShift 中,在配置主節點和客戶端結構時,主節點自帶 OAuth 伺服器的功能。OAuth 伺服器用於生成令牌,該令牌用於對 API 進行身份驗證。由於 OAuth 是主節點的預設設定,因此我們預設使用“允許所有”身份提供程式。存在可以配置在/etc/openshift/master/master-config.yaml中的不同身份提供程式。

OAuth 中存在不同型別的身份提供程式。

  • 允許所有
  • 拒絕所有
  • HTPasswd
  • LDAP
  • 基本身份驗證

允許所有

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

拒絕所有

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,我們需要首先在主節點機器上設定 Httpd-tools,然後以與其他設定相同的方式對其進行配置。

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

授權

授權是 OpenShift 主節點的一項功能,用於驗證使用者。這意味著它會檢查嘗試執行操作的使用者,以檢視該使用者是否有權對給定專案執行該操作。這有助於管理員控制對專案的訪問。

授權策略使用以下內容進行控制 -

  • 規則
  • 角色
  • 繫結

授權的評估使用以下內容進行 -

  • 身份
  • 動作
  • 繫結

使用策略 -

  • 叢集策略
  • 本地策略
廣告

© . All rights reserved.