OpenShift – 基本概念
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 可以定义为 OpenShift (Kubernetes) 集群节点内的容器及其存储的集合。一般来说,我们有两种类型的 pod,从单容器 pod 到多容器 pod。
Single Container 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 – 多容器 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 master 上的 apiService 以创建一个新实例。
apiVersion: v1
kind: Service
metadata:
name: Tutorial_point_service
spec:
ports:
- port: 8080
targetPort: 31999
构建和流
构建
在 OpenShift 中,构建是将图像转换为容器的过程。它是将源代码转换为图像的处理。此构建过程适用于将源代码构建为映像的预定义策略。
构建处理多种策略和来源。
构建策略
-
Source to Image – 这基本上是一个工具,有助于构建可重现的图像。这些镜像始终处于准备阶段,可以使用 Docker run 命令运行。
-
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"
图像流– 在拉取图像后创建图像流。图像流的优势在于它会查找图像新版本的更新。这用于比较由标签标识的任意数量的 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 中被定义为可以多次使用的标准对象。它使用用于创建多个对象的占位符列表进行参数化。这可用于创建任何内容,从 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 中,在配置 master 和 client 结构时,master 提供了 OAuth 服务器的内置功能。OAuth 服务器用于生成令牌,用于对 API 进行身份验证。由于 OAuth 作为 master 的默认设置,我们默认使用 Allow All 身份提供者。存在不同的身份提供者,可以在/etc/openshift/master/master-config.yaml进行配置。
OAuth 中存在不同类型的身份提供者。
- 允许所有
- 全部拒绝
- HT密码
- 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
HT密码
为了使用HTPasswd,我们需要先在主机上设置Httpd-tools,然后像我们在其他机器上一样配置它。
identityProviders:
- name: my_htpasswd_provider
challenge: true
login: true
provider:
apiVersion: v1
kind: HTPasswdPasswordIdentityProvider
授权
授权是 OpenShift master 的一项功能,用于验证验证用户。这意味着它会检查尝试执行操作的用户,以查看该用户是否有权在给定项目上执行该操作。这有助于管理员控制对项目的访问。
授权策略使用 –
- 规则
- 角色
- 绑定
授权评估是使用 –
- 身份
- 行动
- 绑定
使用政策 –
- 集群策略
- 地方政策