openshift 是红帽做的一个 kubernetes 发行版,相当于 rancher 的竞品。红帽公司 kubernetes 的基础上,引入了安全机制,身份验证,网络监控,日志可视化等特性,试图在云原生领域分一杯羹。
scc(Security Context Constraints)
最近在 openshift 上面部署 traefik 出现了点问题。
1
2
3
4
5
6
Error creating: pods "traefik-ingress-controller-68cc888857-" is forbidden: unable to validate against any security context constraint: [provider restricted: .spec.securityContext.hostNetwork: Invalid value: true: Host network is not allowed to be used
spec.containers[0].securityContext.capabilities.add: Invalid value: "NET_BIND_SERVICE": capability may not be added
spec.containers[0].securityContext.hostNetwork: Invalid value: true: Host network is not allowed to be used
spec.containers[0].securityContext.containers[0].hostPort: Invalid value: 80: Host ports are not allowed to be used
spec.containers[0].securityContext.containers[0].hostPort: Invalid value: 443: Host ports are not allowed to be used
spec.containers[0].securityContext.containers[0].hostPort: Invalid value: 8080: Host ports are not allowed to be used]
根据错误提示,找到了问题点在于 scc 。官方的介绍如下:
OpenShift 的 安全環境限制 (Security Context Constraints)類似於 RBAC 資源控制用戶訪問的方式,管理員可以使用安全環境限制(Security Context Constraints, SCC)來控制Pod 的權限。 您可以使用 SCC 定義 Pod 運行時必須特定條件才能被系統接受。
简单地说,scc 是在 rbac 的基础之上,对用户的行为进行了一些限制。包括上文提到的hostnetwork,SecurityContext 等。相当于 openshift 在 PodSecurityPolicy 上面做了一层封装。
默认情况下,openshift包含以下8种scc。
- anyuid
- hostaccess
- hostmount-anyuid
- hostnetwork
- node-exporter
- nonroot
- privileged
- restricted
而创建的pod资源默认归属于Restricted策略。管理员用户也可以创建自己的 scc 并赋予自己的 serviceaccount:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
apiVersion: security.openshift.io/v1
kind: SecurityContextConstraints
metadata:
annotations:
kubernetes.io/description: traefikee-scc provides all features of the restricted SCC
but allows users to run with any UID and any GID.
name: traefikee-scc
priority: 10
allowHostDirVolumePlugin: true
allowHostIPC: false
allowHostNetwork: false
allowHostPID: false
allowHostPorts: false
allowPrivilegeEscalation: true
allowPrivilegedContainer: false
allowedCapabilities:
- NET_BIND_SERVICE
defaultAddCapabilities: null
fsGroup:
type: RunAsAny
groups:
- system:authenticated
readOnlyRootFilesystem: false
requiredDropCapabilities:
- MKNOD
runAsUser:
type: RunAsAny
seLinuxContext:
type: MustRunAs
supplementalGroups:
type: RunAsAny
users: []
volumes:
- configMap
- downwardAPI
- emptyDir
- persistentVolumeClaim
- projected
- secret
1
2
3
oc create -f new-sa.yaml
oc create -f new-scc.yaml
oadm policy add-scc-to-user new-scc system:serviceaccount:monitor:new-sa
所以如果创建的资源未就绪,可以用 kubectl describe pod 看一下是否触犯了 scc 的限制。
回到原题,我之所以想部署 traefik 是想做一个接入的控制平面。但是在 openshift 平台上面,其实有自己的一种实现,这种实现叫做 route。
route 相关问题
同域名默认情况只允许一个命名空间
默认情况下禁止同域名跨namespace,需要启用该特性以支持,否则创建 route 会出现 a route in another namespace holds XX 。需要修改 openshift 的内置控制器配置以支持同域名跨namespace route。
1
oc -n openshift-ingress-operator patch ingresscontroller/default --patch '{"spec":{"routeAdmission":{"namespaceOwnership":"InterNamespaceAllowed"}}}' --type=merge
泛域名解析
建立泛域名解析的 route 时,会提示wildcard routes are not allowed。
openshift3可以通过设置ROUTER_ALLOW_WILDCARD_ROUTES 环境变量; openshift4不支持,该问题无解。 参考 https://github.com/openshift/enhancements/blob/master/enhancements/ingress/wildcard-admission-policy.md
ingress 转换
为了适配大家在其他平台使用的 ingress 。openshift 做了一点兼容性处理,创建 ingress 时会对应创建 route。而如果ingress 中带 TLS ,openshift 也会转换成对应的 route。但 openshift 的route,tls 公私钥是直接存在 route 中的,而不是 secret 。
多path解析
如果原先的 ingress 存在针对同域名的多path前缀解析。比如ingress a 监听 域名 a 的 /a 路径;ingress b 监听域名 a 的 /b 路径,那么类似 traefik 的 url rewrite 规则,在注解里面也需要加入 rewrite 注解。openshift 会把这个注解加入到转换的 route 中。
1
2
annotations:
haproxy.router.openshift.io/rewrite-target: /
网络策略
如果应用无法访问跨namespace service/pod,具体体现是请求长时间没有响应。这应该是这个命名空间开启了隔离,需要用oc客户端赋权。
1
oc adm pod-network make-projects-global <project1> <project2>
反过来,如果用户要让某个命名空间(在openshift里面也叫做 project)只能namespace 内互访问,则可以这么操作:
1
oc adm pod-network isolate-projects <project1> <project2>
CRI问题
目前已知的容器运行时有以下三个:
- containerd
- CRI-O
- Docker
openshift 用的是 cri-o 。如果部署的应用强依赖于 containerd/docker ,则部署会导致失败。比如 openkruise 项目就不支持 openshift 。
参考链接
[1] https://ithelp.ithome.com.tw/articles/10243781
[2] https://kubernetes.io/docs/concepts/policy/pod-security-policy/
[3] https://cloud.tencent.com/developer/article/1603597
[4] https://docs.openshift.com/container-platform/4.8/rest_api/network_apis/route-route-openshift-io-v1.html
[5] https://docs.openshift.com/container-platform/3.5/admin_guide/managing_networking.html
OpenShift is a Kubernetes distribution made by Red Hat, equivalent to a competitor of Rancher. On top of Kubernetes, Red Hat has introduced security mechanisms, authentication, network monitoring, log visualization and other features, trying to get a piece of the cloud-native pie.
SCC (Security Context Constraints)
Recently, there was a problem deploying Traefik on OpenShift.
1
2
3
4
5
6
Error creating: pods "traefik-ingress-controller-68cc888857-" is forbidden: unable to validate against any security context constraint: [provider restricted: .spec.securityContext.hostNetwork: Invalid value: true: Host network is not allowed to be used
spec.containers[0].securityContext.capabilities.add: Invalid value: "NET_BIND_SERVICE": capability may not be added
spec.containers[0].securityContext.hostNetwork: Invalid value: true: Host network is not allowed to be used
spec.containers[0].securityContext.containers[0].hostPort: Invalid value: 80: Host ports are not allowed to be used
spec.containers[0].securityContext.containers[0].hostPort: Invalid value: 443: Host ports are not allowed to be used
spec.containers[0].securityContext.containers[0].hostPort: Invalid value: 8080: Host ports are not allowed to be used]
Based on the error message, the problem was found to be with SCC. The official introduction is as follows:
OpenShift’s Security Context Constraints (SCC) are similar to how RBAC resources control user access. Administrators can use Security Context Constraints (SCC) to control Pod permissions. You can use SCC to define specific conditions that Pods must meet at runtime to be accepted by the system.
Simply put, SCC adds some restrictions on user behavior on top of RBAC. This includes the hostNetwork and SecurityContext mentioned above. It’s equivalent to OpenShift wrapping a layer on top of PodSecurityPolicy.
By default, OpenShift includes the following 8 types of SCC:
- anyuid
- hostaccess
- hostmount-anyuid
- hostnetwork
- node-exporter
- nonroot
- privileged
- restricted
And created pod resources belong to the Restricted policy by default. Administrator users can also create their own SCC and assign it to their serviceaccount:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
apiVersion: security.openshift.io/v1
kind: SecurityContextConstraints
metadata:
annotations:
kubernetes.io/description: traefikee-scc provides all features of the restricted SCC
but allows users to run with any UID and any GID.
name: traefikee-scc
priority: 10
allowHostDirVolumePlugin: true
allowHostIPC: false
allowHostNetwork: false
allowHostPID: false
allowHostPorts: false
allowPrivilegeEscalation: true
allowPrivilegedContainer: false
allowedCapabilities:
- NET_BIND_SERVICE
defaultAddCapabilities: null
fsGroup:
type: RunAsAny
groups:
- system:authenticated
readOnlyRootFilesystem: false
requiredDropCapabilities:
- MKNOD
runAsUser:
type: RunAsAny
seLinuxContext:
type: MustRunAs
supplementalGroups:
type: RunAsAny
users: []
volumes:
- configMap
- downwardAPI
- emptyDir
- persistentVolumeClaim
- projected
- secret
1
2
3
oc create -f new-sa.yaml
oc create -f new-scc.yaml
oadm policy add-scc-to-user new-scc system:serviceaccount:monitor:new-sa
So if created resources are not ready, you can use kubectl describe pod to see if SCC restrictions have been violated.
Back to the original topic, the reason I wanted to deploy Traefik was to create an ingress control plane. But on the OpenShift platform, there’s actually its own implementation, which is called route.
Route Related Issues
Same Domain Name Only Allows One Namespace by Default
By default, cross-namespace with the same domain name is prohibited. This feature needs to be enabled to support it, otherwise creating a route will show “a route in another namespace holds XX”. The built-in controller configuration of OpenShift needs to be modified to support cross-namespace routes with the same domain name.
1
oc -n openshift-ingress-operator patch ingresscontroller/default --patch '{"spec":{"routeAdmission":{"namespaceOwnership":"InterNamespaceAllowed"}}}' --type=merge
Wildcard Domain Resolution
When creating a route with wildcard domain resolution, it will prompt wildcard routes are not allowed.
OpenShift 3 can enable it by setting the ROUTER_ALLOW_WILDCARD_ROUTES environment variable; OpenShift 4 does not support it, and this issue has no solution. Reference: https://github.com/openshift/enhancements/blob/master/enhancements/ingress/wildcard-admission-policy.md
Ingress Conversion
To adapt to ingress used on other platforms, OpenShift has done some compatibility processing. When creating ingress, it will correspondingly create a route. And if ingress includes TLS, OpenShift will also convert it to the corresponding route. But in OpenShift’s route, TLS public and private keys are stored directly in the route, not in secrets.
Multi-path Resolution
If the original ingress has multi-path prefix resolution for the same domain name. For example, ingress a listens to the /a path of domain a; ingress b listens to the /b path of domain a, then similar to Traefik’s URL rewrite rules, rewrite annotations also need to be added in the annotations. OpenShift will add this annotation to the converted route.
1
2
annotations:
haproxy.router.openshift.io/rewrite-target: /
Network Policy
If applications cannot access cross-namespace services/pods, specifically manifested as requests having no response for a long time. This should be that this namespace has isolation enabled, and the oc client needs to be used to grant permissions.
1
oc adm pod-network make-projects-global <project1> <project2>
Conversely, if users want a namespace (also called project in OpenShift) to only allow access within the namespace, they can do this:
1
oc adm pod-network isolate-projects <project1> <project2>
CRI Issues
Currently known container runtimes include the following three:
- containerd
- CRI-O
- Docker
OpenShift uses CRI-O. If deployed applications strongly depend on containerd/docker, deployment will fail. For example, the OpenKruise project does not support OpenShift.
References
[1] https://ithelp.ithome.com.tw/articles/10243781
[2] https://kubernetes.io/docs/concepts/policy/pod-security-policy/
[3] https://cloud.tencent.com/developer/article/1603597
[4] https://docs.openshift.com/container-platform/4.8/rest_api/network_apis/route-route-openshift-io-v1.html
[5] https://docs.openshift.com/container-platform/3.5/admin_guide/managing_networking.html
OpenShiftはRed Hatが作成したKubernetesディストリビューションで、Rancherの競合製品に相当します。Red HatはKubernetesの上に、セキュリティメカニズム、認証、ネットワーク監視、ログ可視化などの機能を導入し、クラウドネイティブ分野で一席を得ようとしています。
SCC(Security Context Constraints)
最近、OpenShiftでTraefikをデプロイする際に問題が発生しました。
1
2
3
4
5
6
Error creating: pods "traefik-ingress-controller-68cc888857-" is forbidden: unable to validate against any security context constraint: [provider restricted: .spec.securityContext.hostNetwork: Invalid value: true: Host network is not allowed to be used
spec.containers[0].securityContext.capabilities.add: Invalid value: "NET_BIND_SERVICE": capability may not be added
spec.containers[0].securityContext.hostNetwork: Invalid value: true: Host network is not allowed to be used
spec.containers[0].securityContext.containers[0].hostPort: Invalid value: 80: Host ports are not allowed to be used
spec.containers[0].securityContext.containers[0].hostPort: Invalid value: 443: Host ports are not allowed to be used
spec.containers[0].securityContext.containers[0].hostPort: Invalid value: 8080: Host ports are not allowed to be used]
エラーメッセージに基づき、問題はSCCにあることがわかりました。公式の説明は以下のとおりです:
OpenShiftのセキュリティコンテキスト制約(Security Context Constraints)は、RBACリソースがユーザーアクセスを制御する方法と類似しています。管理者はセキュリティコンテキスト制約(SCC)を使用してPodの権限を制御できます。SCCを使用して、Podが実行時にシステムによって受け入れられるために満たす必要がある特定の条件を定義できます。
簡単に言えば、SCCはRBACの上にユーザーの行動にいくつかの制限を追加します。これには、上記で言及したhostNetwork、SecurityContextなどが含まれます。OpenShiftがPodSecurityPolicyの上にレイヤーをラップすることに相当します。
デフォルトでは、OpenShiftには以下の8種類のSCCが含まれています:
- anyuid
- hostaccess
- hostmount-anyuid
- hostnetwork
- node-exporter
- nonroot
- privileged
- restricted
作成されたpodリソースはデフォルトでRestrictedポリシーに属します。管理者ユーザーは独自のSCCを作成し、独自のserviceaccountに割り当てることもできます:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
apiVersion: security.openshift.io/v1
kind: SecurityContextConstraints
metadata:
annotations:
kubernetes.io/description: traefikee-scc provides all features of the restricted SCC
but allows users to run with any UID and any GID.
name: traefikee-scc
priority: 10
allowHostDirVolumePlugin: true
allowHostIPC: false
allowHostNetwork: false
allowHostPID: false
allowHostPorts: false
allowPrivilegeEscalation: true
allowPrivilegedContainer: false
allowedCapabilities:
- NET_BIND_SERVICE
defaultAddCapabilities: null
fsGroup:
type: RunAsAny
groups:
- system:authenticated
readOnlyRootFilesystem: false
requiredDropCapabilities:
- MKNOD
runAsUser:
type: RunAsAny
seLinuxContext:
type: MustRunAs
supplementalGroups:
type: RunAsAny
users: []
volumes:
- configMap
- downwardAPI
- emptyDir
- persistentVolumeClaim
- projected
- secret
1
2
3
oc create -f new-sa.yaml
oc create -f new-scc.yaml
oadm policy add-scc-to-user new-scc system:serviceaccount:monitor:new-sa
したがって、作成されたリソースが準備できていない場合、kubectl describe podを使用してSCCの制限に違反しているかどうかを確認できます。
元のトピックに戻ると、Traefikをデプロイしたかった理由は、イングレス制御プレーンを作成することでした。しかし、OpenShiftプラットフォームでは、実際には独自の実装があり、これはrouteと呼ばれます。
route関連の問題
同じドメイン名はデフォルトで1つの名前空間のみを許可
デフォルトでは、同じドメイン名での名前空間間のクロスは禁止されています。これをサポートするには、この機能を有効にする必要があります。そうしないと、routeを作成すると「a route in another namespace holds XX」が表示されます。同じドメイン名での名前空間間routeをサポートするには、OpenShiftの組み込みコントローラー設定を変更する必要があります。
1
oc -n openshift-ingress-operator patch ingresscontroller/default --patch '{"spec":{"routeAdmission":{"namespaceOwnership":"InterNamespaceAllowed"}}}' --type=merge
ワイルドカードドメイン解決
ワイルドカードドメイン解決のrouteを作成する場合、wildcard routes are not allowedというプロンプトが表示されます。
OpenShift 3はROUTER_ALLOW_WILDCARD_ROUTES環境変数を設定することで有効にできます。OpenShift 4はサポートしておらず、この問題には解決策がありません。参考:https://github.com/openshift/enhancements/blob/master/enhancements/ingress/wildcard-admission-policy.md
ingress変換
他のプラットフォームで使用されるingressに適応するため、OpenShiftは互換性処理を行っています。ingressを作成すると、対応するrouteが作成されます。ingressにTLSが含まれている場合、OpenShiftは対応するrouteに変換します。しかし、OpenShiftのrouteでは、TLS公開鍵と秘密鍵はシークレットではなく、routeに直接保存されます。
マルチパス解決
元のingressが同じドメイン名に対してマルチパスプレフィックス解決を持っている場合。例えば、ingress aがドメインaの/aパスをリッスンし、ingress bがドメインaの/bパスをリッスンする場合、TraefikのURL書き換えルールと同様に、アノテーションに書き換えアノテーションも追加する必要があります。OpenShiftはこのアノテーションを変換されたrouteに追加します。
1
2
annotations:
haproxy.router.openshift.io/rewrite-target: /
ネットワークポリシー
アプリケーションが名前空間間のサービス/podにアクセスできない場合、具体的には、リクエストが長時間応答がないことが現れます。これは、この名前空間で分離が有効になっているためで、ocクライアントを使用して権限を付与する必要があります。
1
oc adm pod-network make-projects-global <project1> <project2>
逆に、ユーザーが名前空間(OpenShiftではprojectとも呼ばれる)を名前空間内でのみアクセス可能にしたい場合、次のように操作できます:
1
oc adm pod-network isolate-projects <project1> <project2>
CRIの問題
現在知られているコンテナランタイムには、以下の3つが含まれます:
- containerd
- CRI-O
- Docker
OpenShiftはCRI-Oを使用します。デプロイされたアプリケーションがcontainerd/dockerに強く依存している場合、デプロイメントは失敗します。例えば、OpenKruiseプロジェクトはOpenShiftをサポートしていません。
参考リンク
[1] https://ithelp.ithome.com.tw/articles/10243781
[2] https://kubernetes.io/docs/concepts/policy/pod-security-policy/
[3] https://cloud.tencent.com/developer/article/1603597
[4] https://docs.openshift.com/container-platform/4.8/rest_api/network_apis/route-route-openshift-io-v1.html
[5] https://docs.openshift.com/container-platform/3.5/admin_guide/managing_networking.html
OpenShift — это дистрибутив Kubernetes, созданный Red Hat, эквивалентный конкуренту Rancher. Поверх Kubernetes Red Hat ввела механизмы безопасности, аутентификацию, мониторинг сети, визуализацию логов и другие функции, пытаясь получить кусок пирога облачных вычислений.
SCC (Security Context Constraints)
Недавно возникла проблема с развёртыванием Traefik на OpenShift.
1
2
3
4
5
6
Error creating: pods "traefik-ingress-controller-68cc888857-" is forbidden: unable to validate against any security context constraint: [provider restricted: .spec.securityContext.hostNetwork: Invalid value: true: Host network is not allowed to be used
spec.containers[0].securityContext.capabilities.add: Invalid value: "NET_BIND_SERVICE": capability may not be added
spec.containers[0].securityContext.hostNetwork: Invalid value: true: Host network is not allowed to be used
spec.containers[0].securityContext.containers[0].hostPort: Invalid value: 80: Host ports are not allowed to be used
spec.containers[0].securityContext.containers[0].hostPort: Invalid value: 443: Host ports are not allowed to be used
spec.containers[0].securityContext.containers[0].hostPort: Invalid value: 8080: Host ports are not allowed to be used]
На основе сообщения об ошибке проблема была найдена в SCC. Официальное введение следующее:
Ограничения контекста безопасности OpenShift (Security Context Constraints) аналогичны тому, как ресурсы RBAC контролируют доступ пользователей. Администраторы могут использовать ограничения контекста безопасности (SCC) для контроля разрешений Pod. Вы можете использовать SCC для определения конкретных условий, которым Pod должны соответствовать во время выполнения, чтобы быть принятыми системой.
Проще говоря, SCC добавляет некоторые ограничения на поведение пользователей поверх RBAC. Это включает упомянутые выше hostNetwork, SecurityContext и т.д. Это эквивалентно тому, что OpenShift оборачивает слой поверх PodSecurityPolicy.
По умолчанию OpenShift включает следующие 8 типов SCC:
- anyuid
- hostaccess
- hostmount-anyuid
- hostnetwork
- node-exporter
- nonroot
- privileged
- restricted
И созданные ресурсы pod по умолчанию принадлежат политике Restricted. Пользователи-администраторы также могут создать свой собственный SCC и назначить его своему serviceaccount:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
apiVersion: security.openshift.io/v1
kind: SecurityContextConstraints
metadata:
annotations:
kubernetes.io/description: traefikee-scc provides all features of the restricted SCC
but allows users to run with any UID and any GID.
name: traefikee-scc
priority: 10
allowHostDirVolumePlugin: true
allowHostIPC: false
allowHostNetwork: false
allowHostPID: false
allowHostPorts: false
allowPrivilegeEscalation: true
allowPrivilegedContainer: false
allowedCapabilities:
- NET_BIND_SERVICE
defaultAddCapabilities: null
fsGroup:
type: RunAsAny
groups:
- system:authenticated
readOnlyRootFilesystem: false
requiredDropCapabilities:
- MKNOD
runAsUser:
type: RunAsAny
seLinuxContext:
type: MustRunAs
supplementalGroups:
type: RunAsAny
users: []
volumes:
- configMap
- downwardAPI
- emptyDir
- persistentVolumeClaim
- projected
- secret
1
2
3
oc create -f new-sa.yaml
oc create -f new-scc.yaml
oadm policy add-scc-to-user new-scc system:serviceaccount:monitor:new-sa
Поэтому, если созданные ресурсы не готовы, можно использовать kubectl describe pod, чтобы посмотреть, не нарушены ли ограничения SCC.
Вернёмся к исходной теме. Причина, по которой я хотел развернуть Traefik, заключалась в создании плоскости управления ingress. Но на платформе OpenShift на самом деле есть своя реализация, которая называется route.
Проблемы, связанные с route
Одно доменное имя по умолчанию разрешает только одно пространство имён
По умолчанию запрещено пересечение пространств имён с одним и тем же доменным именем. Эта функция должна быть включена для поддержки, иначе создание route покажет “a route in another namespace holds XX”. Встроенная конфигурация контроллера OpenShift должна быть изменена для поддержки маршрутов между пространствами имён с одним и тем же доменным именем.
1
oc -n openshift-ingress-operator patch ingresscontroller/default --patch '{"spec":{"routeAdmission":{"namespaceOwnership":"InterNamespaceAllowed"}}}' --type=merge
Разрешение домена с подстановочными знаками
При создании route с разрешением домена с подстановочными знаками появится подсказка wildcard routes are not allowed.
OpenShift 3 может включить это, установив переменную окружения ROUTER_ALLOW_WILDCARD_ROUTES; OpenShift 4 не поддерживает это, и у этой проблемы нет решения. Ссылка: https://github.com/openshift/enhancements/blob/master/enhancements/ingress/wildcard-admission-policy.md
Преобразование ingress
Чтобы адаптироваться к ingress, используемым на других платформах, OpenShift выполнил некоторую обработку совместимости. При создании ingress будет соответственно создан route. И если ingress включает TLS, OpenShift также преобразует его в соответствующий route. Но в route OpenShift открытые и закрытые ключи TLS хранятся непосредственно в route, а не в секретах.
Разрешение нескольких путей
Если исходный ingress имеет разрешение префикса нескольких путей для одного и того же доменного имени. Например, ingress a прослушивает путь /a домена a; ingress b прослушивает путь /b домена a, то, аналогично правилам перезаписи URL Traefik, аннотации перезаписи также должны быть добавлены в аннотации. OpenShift добавит эту аннотацию в преобразованный route.
1
2
annotations:
haproxy.router.openshift.io/rewrite-target: /
Сетевая политика
Если приложения не могут получить доступ к сервисам/pod между пространствами имён, конкретно проявляется как запросы, не имеющие ответа в течение длительного времени. Это должно быть из-за того, что в этом пространстве имён включена изоляция, и клиент oc должен быть использован для предоставления разрешений.
1
oc adm pod-network make-projects-global <project1> <project2>
И наоборот, если пользователи хотят, чтобы пространство имён (также называемое project в OpenShift) разрешало доступ только в пределах пространства имён, они могут сделать это:
1
oc adm pod-network isolate-projects <project1> <project2>
Проблемы CRI
В настоящее время известные контейнерные среды выполнения включают следующие три:
- containerd
- CRI-O
- Docker
OpenShift использует CRI-O. Если развёрнутые приложения сильно зависят от containerd/docker, развёртывание не удастся. Например, проект OpenKruise не поддерживает OpenShift.
Ссылки
[1] https://ithelp.ithome.com.tw/articles/10243781
[2] https://kubernetes.io/docs/concepts/policy/pod-security-policy/
[3] https://cloud.tencent.com/developer/article/1603597
[4] https://docs.openshift.com/container-platform/4.8/rest_api/network_apis/route-route-openshift-io-v1.html
[5] https://docs.openshift.com/container-platform/3.5/admin_guide/managing_networking.html
💬 讨论 / Discussion
对这篇文章有想法?欢迎在 GitHub 上发起讨论。
Have thoughts on this post? Start a discussion on GitHub.