kind: NetworkPolicy
apiVersion: networking.k8s.io/v1
metadata:
name: deny-by-default
namespace: example-namespace
spec:
podSelector:
ingress: []
如果您使用的是多个用户可以访问的集群,则您的集群可能会使用网络策略来控制哪些 Pod、服务和命名空间可以通过网络相互通信。如果您的集群使用限制性网络策略,则 Knative 系统 Pod 可能无法访问您的 Knative 应用程序。例如,如果您的命名空间具有以下网络策略(拒绝所有请求),则 Knative 系统 Pod 无法访问您的 Knative 应用程序。
kind: NetworkPolicy
apiVersion: networking.k8s.io/v1
metadata:
name: deny-by-default
namespace: example-namespace
spec:
podSelector:
ingress: []
要允许 Knative 系统 Pod 访问您的应用程序,您必须为每个 Knative 系统命名空间添加标签,然后在您的应用程序命名空间中创建一个NetworkPolicy
对象,允许其他具有此标签的命名空间访问该命名空间。
拒绝对集群上非 Knative 服务的请求的网络策略仍然会阻止对这些服务的访问。但是,通过允许 Knative 系统命名空间访问您的 Knative 应用程序,您允许集群中所有命名空间访问您的 Knative 应用程序。 如果您不想允许集群中所有命名空间访问您的 Knative 应用程序,则可能需要改用*Knative 服务的 JSON Web 令牌身份验证*。Knative 服务的 JSON Web 令牌身份验证需要 Service Mesh。 |
安装 OpenShift CLI(oc
)。
在您的集群上安装 OpenShift Serverless Operator 和 Knative Serving。
将knative.openshift.io/system-namespace=true
标签添加到需要访问您的应用程序的每个 Knative 系统命名空间
标记knative-serving
命名空间
$ oc label namespace knative-serving knative.openshift.io/system-namespace=true
标记knative-serving-ingress
命名空间
$ oc label namespace knative-serving-ingress knative.openshift.io/system-namespace=true
标记knative-eventing
命名空间
$ oc label namespace knative-eventing knative.openshift.io/system-namespace=true
标记knative-kafka
命名空间
$ oc label namespace knative-kafka knative.openshift.io/system-namespace=true
在您的应用程序命名空间中创建一个NetworkPolicy
对象,以允许来自具有knative.openshift.io/system-namespace
标签的命名空间的访问
NetworkPolicy
对象apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
name: <network_policy_name> (1)
namespace: <namespace> (2)
spec:
ingress:
- from:
- namespaceSelector:
matchLabels:
knative.openshift.io/system-namespace: "true"
podSelector: {}
policyTypes:
- Ingress
1 | 为您的网络策略提供名称。 |
2 | 您的应用程序所在的命名空间。 |