3.6. 配置私有集群
安装 OpenShift Container Platform 版本 4.4 集群后,您可以将其某些核心组件设置为私有。
您只能对使用您置备的云供应商的基础架构的集群配置进行这个更改。
3.6.1. 关于私有集群
默认情况下,OpenShift Container Platform 被置备为使用可公开访问的 DNS 和端点。在部署集群后,您可以将 DNS、Ingress Controller 和 API 服务器设置为私有。
DNS
如果在安装程序置备的基础架构上安装 OpenShift Container Platform,安装程序会在预先存在的公共区中创建记录,并在可能的情况下为集群自己的 DNS 解析创建一个私有区。在公共区和私有区中,安装程序或集群为 *.apps
和 Ingress
对象创建 DNS 条目,并为 API 服务器创建 api
。
公共和私有区中的 *.apps
记录是相同的,因此当您删除公有区时,私有区为集群无缝地提供所有 DNS 解析。
Ingress Controller
由于默认 Ingress
对象是作为公共对象创建的,所以负载均衡器是面向互联网的,因此在公共子网中。您可以将默认 Ingress Controller 替换为内部控制器。
API Server
默认情况下,安装程序为 API 服务器创建适当的网络负载均衡器,供内部和外部流量使用。
在 Amazon Web Services(AWS)上,会分别创建独立的公共和私有负载均衡器。负载均衡器是基本相同的,唯一不同是带有一个额外的、用于在集群内部使用的端口。虽然安装程序根据 API 服务器要求自动创建或销毁负载均衡器,但集群并不管理或维护它们。只要保留集群对 API 服务器的访问,您可以手动修改或移动负载均衡器。对于公共负载均衡器,需要打开端口 6443,并根据 /readyz
路径配置 HTTPS 用于健康检查。
在 Google Cloud Platform 上,会创建一个负载均衡器来管理内部和外部 API 流量,因此您无需修改负载均衡器。
在 Microsoft Azure 上,会创建公共和私有负载均衡器。但是,由于当前实施的限制,您刚刚在私有集群中保留两个负载均衡器。
3.6.2. 将 DNS 设置为私有
部署集群后,您可以修改其 DNS 使其只使用私有区。
流程
查看集群的
DNS
自定义资源:$ oc get dnses.config.openshift.io/cluster -o yaml apiVersion: config.openshift.io/v1 kind: DNS metadata: creationTimestamp: "2019-10-25T18:27:09Z" generation: 2 name: cluster resourceVersion: "37966" selfLink: /apis/config.openshift.io/v1/dnses/cluster uid: 0e714746-f755-11f9-9cb1-02ff55d8f976 spec: baseDomain: <base_domain> privateZone: tags: Name: <infrastructureID>-int kubernetes.io/cluster/<infrastructureID>: owned publicZone: id: Z2XXXXXXXXXXA4 status: {}
请注意,
spec
部分包含一个私有区和一个公共区。修补
DNS
自定义资源以删除公共区:$ oc patch dnses.config.openshift.io/cluster --type=merge --patch='{"spec": {"publicZone": null}}' dns.config.openshift.io/cluster patched
因为 Ingress Controller 在创建
Ingress
对象时会参考DNS
定义,因此当您创建或修改Ingress
对象时,只会创建私有记录。重要在删除公共区时,现有 Ingress 对象的 DNS 记录不会修改。
可选:查看集群的
DNS
自定义资源,并确认已删除公共区:$ oc get dnses.config.openshift.io/cluster -o yaml apiVersion: config.openshift.io/v1 kind: DNS metadata: creationTimestamp: "2019-10-25T18:27:09Z" generation: 2 name: cluster resourceVersion: "37966" selfLink: /apis/config.openshift.io/v1/dnses/cluster uid: 0e714746-f755-11f9-9cb1-02ff55d8f976 spec: baseDomain: <base_domain> privateZone: tags: Name: <infrastructureID>-int kubernetes.io/cluster/<infrastructureID>-wfpg4: owned status: {}
3.6.3. 将 Ingress Controller 设置为私有
部署集群后,您可以修改其 Ingress Controller 使其只使用私有区。
流程
修改默认 Ingress Controller,使其仅使用内部端点:
$ oc replace --force --wait --filename - <<EOF apiVersion: operator.openshift.io/v1 kind: IngressController metadata: namespace: openshift-ingress-operator name: default spec: endpointPublishingStrategy: type: LoadBalancerService loadBalancer: scope: Internal EOF ingresscontroller.operator.openshift.io "default" deleted ingresscontroller.operator.openshift.io/default replaced
删除公共 DNS 条目,并更新私有区条目。
3.6.4. 将 API 服务器限制为私有
将集群部署到 Amazon Web Services(AWS)或 Microsoft Azure 后,可以重新配置 API 服务器,使其只使用私有区。
先决条件
-
安装 OpenShift CLI(
oc
)。 -
使用具有
admin
权限的用户登陆到 web 控制台。
流程
在 AWS 或 Azure 的 web 门户或控制台中,执行以下操作:
找到并删除相关的负载均衡器组件。
- 对于 AWS,删除外部负载均衡器。私有区的 API DNS 条目已指向内部负载均衡器,它使用相同的配置,因此您无需修改内部负载均衡器。
-
对于 Azure,删除负载均衡器的
api-internal
规则。
-
在公共区中删除
api.$clustername.$yourdomain
DNS 条目。
在终端中列出集群机器:
$ oc get machine -n openshift-machine-api NAME STATE TYPE REGION ZONE AGE lk4pj-master-0 running m4.xlarge us-east-1 us-east-1a 17m lk4pj-master-1 running m4.xlarge us-east-1 us-east-1b 17m lk4pj-master-2 running m4.xlarge us-east-1 us-east-1a 17m lk4pj-worker-us-east-1a-5fzfj running m4.xlarge us-east-1 us-east-1a 15m lk4pj-worker-us-east-1a-vbghs running m4.xlarge us-east-1 us-east-1a 15m lk4pj-worker-us-east-1b-zgpzg running m4.xlarge us-east-1 us-east-1b 15m
在以下步骤中,修改 control plane 机器(名称中包含
master
的机器)。从每台 control plane 机器移除外部负载均衡器。
编辑 control plane
Machine
对象,删除对外部负载均衡器的引用。$ oc edit machines -n openshift-machine-api <master_name> 1
- 1
- 指定要修改的 control plane 或 master
Machine
对象的名称。
删除描述外部负载均衡器的行(在以下示例中已被标记),保存并退出对象规格:
... spec: providerSpec: value: ... loadBalancers: - name: lk4pj-ext 1 type: network 2 - name: lk4pj-int type: network
-
对名称中包含
master
的每个机器重复这个过程。