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 主节点的一项功能,用于验证用户。这意味着它会检查尝试执行操作的用户,以查看该用户是否有权对给定项目执行该操作。这有助于管理员控制对项目的访问。

授权策略使用以下内容进行控制 -

  • 规则
  • 角色
  • 绑定

授权的评估使用以下内容进行 -

  • 身份
  • 动作
  • 绑定

使用策略 -

  • 集群策略
  • 本地策略
广告