OpenShift - 基本概念

在开始实际设置和部署应用程序之前,我们需要了解OpenShift V3中使用的一些基本术语和概念.

容器和图像

Images

这些是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

容器

这是在OpenShift集群上部署Docker镜像时创建的.在定义任何配置时,我们在配置文件中定义容器部分.一个容器可以在里面运行多个映像,并且在集群节点上运行的所有容器都由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

在上面的配置中,我们定义了一个带有两个的多容器窗格其中包含Tomcat和MongoDB的图片.

Pods和服务

Pods

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

Multi-Container 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.服务有助于管理负载平衡配置并非常容易地扩展容器.在OpenShift中,服务是一个REST对象,它的设计可以在OpenShift master上发布到apiService以创建一个新实例.

 
 apiVersion:v1 
种类:服务
元数据:
名称:Tutorial_point_service 
规格:
端口:
  - 端口:8080 
 targetPort:31999

构建和流

构建

在OpenShift中,构建是一个转换图像的过程进入容器.它是将源代码转换为图像的处理.这个构建过程适用于构建源代码到图像的预定义策略.

构建处理多个策略和源.

构建策略

  • 图片来源 : 这基本上是一种工具,有助于构建可重现的图像.这些图像始终处于使用Docker运行命令运行的准备阶段.

  • Docker Build : 这是通过运行简单的Docker构建命令使用Docker文件构建图像的过程.

  • 自定义构建 : 这些是用于创建基本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"

Image Streams : 拉动图像后创建图像流.图像流的优点是它可以在新版本的图像上查找更新.这用于比较由标签标识的任意数量的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和网络套接字

配置服务时,选择器用于配置服务并使用该服务查找端点.以下是我们如何使用适当的协议为该服务创建服务和路由的示例.

{
   "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中的标准对象,可以多次使用.它使用一个占位符列表进行参数化,这些占位符用于创建多个对象.这可以用于创建任何内容,从容器到网络,用户有权创建.如果图像中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中,在配置master时和客户端结构,master提出了OAuth服务器的内置功能. OAuth服务器用于生成令牌,用于对API进行身份验证.由于OAuth是master的默认设置,因此我们默认使用Allow All身份提供程序.存在不同的身份提供者,可以在/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工具,然后按照与其他工具相同的方式对其进行配置.

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

授权

授权是OpenShif的一项功能t master,用于验证验证用户.这意味着它会检查尝试执行操作的用户,以查看用户是否有权对给定项目执行该操作.这有助于管理员控制对项目的访问.

授权策略使用 :

  • 规则

  • 角色

  • 绑定

授权评估是完成后使用 :

  • 身份

  • 行动

  • 绑定

使用策略 :

  • 群集策略

  • 本地政策