湖南网站建设小公司排名/什么是seo优化推广

湖南网站建设小公司排名,什么是seo优化推广,大连网站制作公司58,资源开发公司经营范围1、kubernetes 网络策略(网络隔离策略) Network Policy 是 Kubernetes 中用于控制 Pod 之间网络通信的一种机制。它通过定义规则,限制哪些 Pod 或外部实体可以与目标 Pod 通信(基于标签、命名空间、端口等)。Network …

1、kubernetes 网络策略(网络隔离策略)

Network Policy 是 Kubernetes 中用于控制 Pod 之间网络通信的一种机制。它通过定义规则,限制哪些 Pod 或外部实体可以与目标 Pod 通信(基于标签、命名空间、端口等)。Network Policy 的实现依赖于 CNI(Container Network Interface)插件(如 Calico、Cilium、Weave Net 等),并非所有网络插件都支持 Network Policy。

Network Policy 提供了基于策略的网络控制,用于隔离应用并减少攻击面。它使用标签选择器模拟传统的分段网络,并通过策略控制它们之间的流量以及来自外部的流量。

Pod 有两种隔离:出口的隔离和入口的隔离,默认情况下入口和出口都是非隔离的,可以接受来自任何请求方的网络请求。所谓的隔离也就是限制流量的流入或者流出,如果一个 NetworkPolicy 的标签选择器选中了某个 Pod,则该 Pod 将变成隔离的(isolated),并将拒绝任何不被 NetworkPolicy 许可的网络连接。

Kubernetes Network Policy 的核心字段通过定义流量规则来实现 Pod 之间的网络隔离。以下是核心字段的详细解析,帮助理解其工作原理和配置方法:

一、核心字段结构

apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:name: <policy-name>namespace <string>       #NetworkPolicy是名称空间级别的资源
spec:podSelector: {}          # 当前规则生效的同一名称空间中的一组目标Pod对象,必选字段;policyTypes:             # 策略类型(Ingress/Egress)二者可同时存在- Ingress- Egressingress:                # 入站规则(允许的流量来源)白名单如果此字段为空,则此 NetworkPolicy 不允许任何入站流量 (这种设置用来确保它所选择的 Pod 在默认情况下是被隔离的)。- from:- <rule-sources>      # 流量来源(Pod、命名空间、IP段)ports:                # 允许的端口和协议- protocol: TCP/UDPport: <port>egress:                 # 出站规则(允许的流量去向)- to:- <rule-destinations> # 流量去向(Pod、命名空间、IP段)ports:- protocol: TCP/UDPport: <port>

二、核心字段详解

1. podSelector
  • 作用:选择该 Network Policy 生效的目标 Pod。

  • 规则

    • 使用标签选择器匹配 Pod(如 matchLabelsmatchExpressions)。
    • 空对象 {}:匹配当前命名空间下的所有 Pod。
  • 示例

    podSelector:matchLabels:app: backend  # 仅作用于标签为 app=backend 的 Pod
    
2. policyTypes
  • 作用:定义策略的类型(入站或出站)。每个 NetworkPolicy 都包含一个 policyTypes 列表,其中包含 IngressEgress 或两者兼具。

  • 可选值

    • Ingress:控制入站流量(谁可以访问目标 Pod)。
    • Egress:控制出站流量(目标 Pod 可以访问谁)。
  • 默认行为

    • 如果未显式指定 policyTypes,则根据 ingressegress 字段的存在自动推断。
  • 示例

    policyTypes:
    - Ingress   # 仅处理入站流量规则
    

3. ingress(入站规则)

定义允许的入站流量来源,每个 NetworkPolicy 可包含一个 ingress 规则的白名单列表。 每个规则都允许同时匹配 fromports 部分的流量。如果此字段为空,则此 NetworkPolicy 不允许任何入站流量 (这种设置用来确保它所选择的 Pod 在默认情况下是被隔离的)。支持多种匹配条件:

3.1 from 字段(流量来源)
  • 支持类型

    • podSelector:匹配同一命名空间内的 Pod。podSelector 是负责选择 Pod 的标签选择算符。如果字段存在但为空值,则选择所有 Pod。

      - podSelector:matchLabels:role: frontend
      
    • namespaceSelector:匹配指定命名空间中的 Pod。namespaceSelector 使用集群范围标签来选择特定的 Namespace。 如果此字段存在但为空值,则会选择所有名字空间。

      - namespaceSelector:matchLabels:env: prod
      
    • ipBlock:匹配 IP 地址段(CIDR 格式)。ipBlock 针对特定 IPBlock 定义策略。如果设置了此字段,则不可以设置其他字段。

      IPBlock 定义一个特定的 CIDR 范围(例如 192.168.1.0/242001:db8::/64), 来自这个 IP 范围的流量来源将会被允许访问与 NetworkPolicySpec 的 podSelector 匹配的 Pod 集合。

      - ipBlock:cidr: 192.168.1.0/24except:  # 排除部分 IP- 192.168.1.1/32
      
  • 组合逻辑

    • from 中的多个条件是 逻辑或(OR) 关系。
    • 同一 from 块内的多个条件是 逻辑与(AND) 关系。

    NetworkPolicy 的 .spec.ingress.from.spec.egress.to 字段中,可以指定 4 种类型的标签选择器:

    • podSelector 选择与 NetworkPolicy 同名称空间中的 Pod 作为入方向访问控制规则的源或者出方向访问控制规则的目标
    • namespaceSelector 选择某个名称空间(其中所有的Pod)作为入方向访问控制规则的源或者出方向访问控制规则的目标
    • namespaceSelectorpodSelector 在一个 to / from 条目中同时包含 namespaceSelectorpodSelector 将选中指定名称空间中的指定 Pod。此时请特别留意 YAML 的写法,如下所示:
      ...ingress:- from:- namespaceSelector:matchLabels:user: alicepodSelector:matchLabels:role: client...
    

    该例子中,podSelector 前面没有 - 减号,namespaceSelector 和 podSelector 是同一个 from 元素的两个字段,将选中带 user=alice 标签的名称空间中所有带 role=client 标签的 Pod。但是,下面的这个 NetworkPolicy 含义是不一样的:

     ...ingress:- from:- namespaceSelector:matchLabels:user: alice- podSelector:matchLabels:role: client...
    
    • 后者,podSelector 前面带 - 减号,说明 namespaceSelector 和 podSelector 是 from 数组中的两个元素,他们将选中 NetworkPolicy 同名称空间中带 role=client 标签的对象,以及带 user=alice 标签的名称空间的所有 Pod。
    • 前者是交集关系(且),后者是并集关系(或)
3.2 ports 字段
  • 作用:指定允许的协议和端口。ports 是在此规则选中的 Pod 上应可访问的端口列表。此列表中的个项目使用逻辑或操作组合。如果此字段为空或缺失, 则此规则匹配所有端口(进入流量可访问任何端口)

  • 规则

    • 如果未指定 ports,则允许所有端口。

    • 支持 TCP(默认)和 UDP

    • ingress.ports.endPort

      endPort 表示如果设置了此字段,则策略应该允许 port 与 endPort 之间(包含二者)的所有端口。 如果未定义 port 或将 port 字段值为命名端口(字符串),则不可以使用 endPort。 endPort 必须等于或大于 port 值。

  • 示例

    ports:
    - protocol: TCPport: 80     # 允许 TCP 80 端口
    - protocol: UDPport: 53     # 允许 UDP 53 端口
    

4. egress(出站规则)

定义允许的出站流量去向,egress 是应用到所选 Pod 的出站规则的列表。如果此字段为空,则此 NetworkPolicy 拒绝所有出站流量(这策略可以确保它所选中的 Pod 在默认情况下是被隔离的)语法与 ingress 类似:

4.1 to 字段(流量去向)
  • 支持类型

    • podSelectornamespaceSelectoripBlock(同 from)。
  • 示例(允许访问外部 DNS 服务器):

    egress:
    - to:- ipBlock:cidr: 8.8.8.8/32ports:- protocol: UDPport: 53
    
4.2 ports 字段
  • ingress 中的 ports 字段规则一致。

三、关键行为规则

  1. 白名单机制
    • 一旦为 Pod 定义任意 Network Policy,其流量默认进入“白名单模式”。
    • 未被规则明确允许的流量将被拒绝。
  2. 策略叠加
    • 多个 Network Policy 同时作用于同一 Pod 时,规则是 叠加生效 的(逻辑或关系)。
    • 示例:若策略 A 允许来自 Pod X 的流量,策略 B 允许来自 Pod Y 的流量,则最终允许 X 和 Y。
  3. 命名空间隔离
    • namespaceSelector 用于跨命名空间控制,但需确保目标命名空间存在且标签匹配。
  4. IP 段限制
    • ipBlock 适用于外部 IP 或集群内非 Pod IP(如 Service ClusterIP)。

四、常见配置场景

创建测试环境

[root@master ~]# mkdir networkpolicy
创建两个名称空间
[root@master networkpolicy]# ls
[root@master networkpolicy]# kubectl create ns app
namespace/app created
[root@master networkpolicy]# kubectl create ns dev
namespace/dev created
[root@master networkpolicy]# kubectl get ns 
NAME               STATUS   AGE
app                Active   7s
dev                Active   3s[root@master networkpolicy]# cat deployment-dev.yml 
apiVersion: apps/v1
kind: Deployment
metadata:name: deployment-demonamespace: dev
spec:replicas: 2selector:matchLabels:app: demoapprelease: stabletemplate:metadata:labels :app: demoapprelease: stablespec:containers:- name: demoappimage: nginxports:- containerPort: 80name: http[root@master networkpolicy]# kubectl apply -f deployment-dev.yml 
deployment.apps/deployment-demo created
[root@master networkpolicy]# kubectl get pod,deploy -n dev -o wide 
NAME                                   READY   STATUS    RESTARTS   AGE     IP               NODE     NOMINATED NODE   READINESS GATES
pod/deployment-demo-54668bc56b-qswzx   1/1     Running   0          7m22s   10.244.140.84    node02   <none>           <none>
pod/deployment-demo-54668bc56b-xz9ht   1/1     Running   0          7m22s   10.244.186.217   node03   <none>           <none>NAME                              READY   UP-TO-DATE   AVAILABLE   AGE     CONTAINERS   IMAGES   SELECTOR
deployment.apps/deployment-demo   2/2     2            2           7m22s   demoapp      nginx    app=demoapp,release=stable[root@master networkpolicy]# cat deployment-app.yml 
apiVersion: apps/v1
kind: Deployment
metadata:name: deployment-demo-appnamespace: app
spec:replicas: 2selector:matchLabels:app: nginxrelease: latesttemplate:metadata:labels:app: nginxrelease: latestspec:containers:- name: nginximage: nginxports:- containerPort: 80name: http[root@master networkpolicy]# kubectl apply -f deployment-app.yml 
deployment.apps/deployment-demo-app created
[root@master networkpolicy]# kubectl get pod,deploy -n app -o wide 
NAME                                       READY   STATUS    RESTARTS   AGE     IP               NODE     NOMINATED NODE   READINESS GATES
pod/deployment-demo-app-7c469bff9d-cdm5q   1/1     Running   0          2m39s   10.244.186.218   node03   <none>           <none>
pod/deployment-demo-app-7c469bff9d-hs4v7   1/1     Running   0          2m39s   10.244.140.85    node02   <none>           <none>NAME                                  READY   UP-TO-DATE   AVAILABLE   AGE     CONTAINERS   IMAGES   SELECTOR
deployment.apps/deployment-demo-app   2/2     2            2           2m39s   nginx        nginx    app=nginx,release=latest创建service
[root@master networkpolicy]# cat deployment-dev-svc.yml
apiVersion: v1
kind: Service
metadata:name: dev-svcnamespace: dev
spec:selector:app: demoapprelease: stableports:- protocol: TCPport: 8080targetPort: 80[root@master networkpolicy]# kubectl apply -f deployment-dev-svc.yml 
service/dev-svc created
[root@master networkpolicy]# kubectl get svc -n dev
NAME      TYPE        CLUSTER-IP     EXTERNAL-IP   PORT(S)    AGE
dev-svc   ClusterIP   10.108.14.28   <none>        8080/TCP   6m37s

测试在app名称空间下访问dev名称空间里面的应用

[root@master networkpolicy]# kubectl exec -it deployment-demo-app-7c469bff9d-cdm5q -n app  -- /bin/bash
root@deployment-demo-app-7c469bff9d-cdm5q:/# curl -I http://10.244.140.84                         
HTTP/1.1 200 OK
Server: nginx/1.27.4
Date: Wed, 26 Mar 2025 08:49:50 GMT
Content-Type: text/html
Content-Length: 615
Last-Modified: Wed, 05 Feb 2025 11:06:32 GMT
Connection: keep-alive
ETag: "67a34638-267"
Accept-Ranges: bytesroot@deployment-demo-app-7c469bff9d-cdm5q:/# curl -I http://10.244.186.217
HTTP/1.1 200 OK
Server: nginx/1.27.4
Date: Wed, 26 Mar 2025 08:49:59 GMT
Content-Type: text/html
Content-Length: 615
Last-Modified: Wed, 05 Feb 2025 11:06:32 GMT
Connection: keep-alive
ETag: "67a34638-267"
Accept-Ranges: bytesroot@deployment-demo-app-7c469bff9d-cdm5q:/# curl -I http://dev-svc.dev.svc.cluster.local:8080
HTTP/1.1 200 OK
Server: nginx/1.27.4
Date: Wed, 26 Mar 2025 12:08:24 GMT
Content-Type: text/html
Content-Length: 615
Last-Modified: Wed, 05 Feb 2025 11:06:32 GMT
Connection: keep-alive
ETag: "67a34638-267"
Accept-Ranges: bytes

在测试在dev名称空间下访问app名称空间里面的应用

[root@master networkpolicy]# kubectl exec -it deployment-demo-54668bc56b-xz9ht -n dev -- /bin/bash
root@deployment-demo-54668bc56b-xz9ht:/# curl -I http://10.244.186.218
HTTP/1.1 200 OK
Server: nginx/1.27.4
Date: Wed, 26 Mar 2025 08:52:34 GMT
Content-Type: text/html
Content-Length: 615
Last-Modified: Wed, 05 Feb 2025 11:06:32 GMT
Connection: keep-alive
ETag: "67a34638-267"
Accept-Ranges: bytesroot@deployment-demo-54668bc56b-xz9ht:/# curl -I http://10.244.140.85 
HTTP/1.1 200 OK
Server: nginx/1.27.4
Date: Wed, 26 Mar 2025 08:52:42 GMT
Content-Type: text/html
Content-Length: 615
Last-Modified: Wed, 05 Feb 2025 11:06:32 GMT
Connection: keep-alive
ETag: "67a34638-267"
Accept-Ranges: bytes

综上默认情况下各个名称空间中的pod都是互通的。

为所有名称空间打上标签

[root@master networkpolicy]# kubectl label ns dev resource=dev
namespace/dev labeled
[root@master networkpolicy]# kubectl label ns app resource=app system=app
namespace/app labeled
[root@master networkpolicy]# kubectl get ns --show-labels | grep dev
dev                Active   23m   kubernetes.io/metadata.name=dev,resource=dev
[root@master networkpolicy]# kubectl get ns --show-labels | grep app
app                Active   23m   kubernetes.io/metadata.name=app,resource=app,system=app
场景 1:禁止所有入站流量

你可以通过创建选择所有 Pod 但不允许任何进入这些 Pod 的入站流量的 NetworkPolicy 来为名字空间创建 “dev” 隔离策略。

这确保即使没有被任何其他 NetworkPolicy 选择的 Pod 仍将被隔离以进行入口。 此策略不影响任何 Pod 的出口隔离。

[root@master networkpolicy]# cat networkpolicy-denyall-dev.yml 
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:name: deny-all-ingressnamespace: dev
spec:podSelector: {}policyTypes:- Ingress   # 无ingress 规则,拒绝所有入站[root@master networkpolicy]# kubectl apply -f networkpolicy-denyall-dev.yml
[root@master networkpolicy]# kubectl get networkpolicy -n dev
NAME               POD-SELECTOR   AGE
deny-all-ingress   <none>         3m22s

测试在app命令空间的pod中访问dev名称空间的资源

[root@master networkpolicy]# kubectl exec -it deployment-demo-app-7c469bff9d-cdm5q -n app  -- /bin/bash
root@deployment-demo-app-7c469bff9d-cdm5q:/# curl -I http://10.244.140.84
^C
root@deployment-demo-app-7c469bff9d-cdm5q:/# 
root@deployment-demo-app-7c469bff9d-cdm5q:/# curl 10.244.186.217
^C在default名称空间中的pod访问dev名称空间中的资源
[root@master networkpolicy]# kubectl exec -it nginx-deployment-6d758bfc44-gg2sw -- /bin/bash
root@nginx-deployment-6d758bfc44-gg2sw:/# curl -I http://10.244.140.84
^C

允许所有入站流量

如果你想允许一个名字空间中所有 Pod 的所有入站连接,你可以创建一个明确允许的策略。

apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:name: allow-all-ingress
spec:podSelector: {}policyTypes:- Ingressingress:- {}

有了这个策略,任何额外的策略都不会导致到这些 Pod 的任何入站连接被拒绝。 此策略对任何 Pod 的出口隔离没有影响。

场景 2:允许同一命名空间的特定 Pod

要实现允许 default 命名空间下指定 Pod 通过 Service(ClusterIP/DNS) 访问 dev 命名空间下的 Pod,需明确以下两点:

  1. Service 的流量本质
    Kubernetes Service 只是将流量转发到后端 Pod,最终流量仍是 Pod-to-Pod。因此 NetworkPolicy 仍需控制 源 Poddefault 命名空间)到 目标 Poddev 命名空间)的流量。
  2. 关键配置
    • 目标 Pod(dev 命名空间)需要正确标签。
    • Service 的 selector 必须匹配目标 Pod 的标签。
    • NetworkPolicy 需在 dev 命名空间定义入站规则。

在default名称空间下在创建测试pod

[root@master networkpolicy]# cat deployment-default.yml 
apiVersion: apps/v1
kind: Deployment
metadata:name: test-demo
spec:replicas: 2selector:matchLabels:svc: nginxtemplate:metadata:labels :svc: nginxspec:containers:- name: nginx-1image: nginxports:- containerPort: 80name: http
[root@master networkpolicy]# kubectl apply -f deployment-default.yml 
deployment.apps/test-demo created[root@master networkpolicy]# kubectl get pod,deploy
NAME                                    READY   STATUS    RESTARTS        AGE
pod/nginx-deployment-6d758bfc44-gg2sw   1/1     Running   5 (4h19m ago)   6d5h
pod/nginx-deployment-6d758bfc44-zsxqb   1/1     Running   3 (4h19m ago)   2d6h
pod/test-demo-64cd7dd9dd-fp44q          1/1     Running   0               30s
pod/test-demo-64cd7dd9dd-qtfbd          1/1     Running   0               30sNAME                               READY   UP-TO-DATE   AVAILABLE   AGE
deployment.apps/nginx-deployment   2/2     2            2           6d5h
deployment.apps/test-demo          2/2     2            2           31s

创建规则,允许default名称空间下带有svc=nginx标签的pod访问dev名称空间中带有指定标签的pod资源

[root@master networkpolicy]# cat netpol-dev-ingress-2.yml 
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:name: test-default-devnamespace: dev
spec:podSelector:matchLabels:app: demoapprelease: stablepolicyTypes:- Ingressingress:- from:- namespaceSelector:matchLabels:kubernetes.io/metadata.name: defaultpodSelector:matchLabels:svc: nginxports:- port: 80 #目标 Pod 的实际端口(非 Service 端口)[root@master networkpolicy]# kubectl apply -f netpol-dev-ingress-2.yml 
networkpolicy.networking.k8s.io/test-default-dev created
[root@master networkpolicy]# kubectl get netpol -n dev 
NAME                 POD-SELECTOR                 AGE
test-default-dev     app=demoapp,release=stable   8s

测试在default名称空间中带有svc=nginx的pod中访问dev名称空间下的pod

[root@master ~]# kubectl get pod --show-labels
NAME                                READY   STATUS    RESTARTS      AGE   LABELS
nginx-deployment-6d758bfc44-gg2sw   1/1     Running   6 (45m ago)   7d    app=nginx,pod-template-hash=6d758bfc44
nginx-deployment-6d758bfc44-zsxqb   1/1     Running   4 (45m ago)   3d    app=nginx,pod-template-hash=6d758bfc44
test-demo-54449d9d85-kk7s4          1/1     Running   1 (43m ago)   18h   pod-template-hash=54449d9d85,svc=nginx
test-demo-54449d9d85-pn56j          1/1     Running   1 (43m ago)   18h   pod-template-hash=54449d9d85,svc=nginx[root@master ~]# kubectl exec -it test-demo-54449d9d85-pn56j -- curl -I http://10.244.140.88
HTTP/1.1 200 OK
Server: nginx/1.27.4
Date: Thu, 27 Mar 2025 07:24:38 GMT
Content-Type: text/html
Content-Length: 615
Last-Modified: Wed, 05 Feb 2025 11:06:32 GMT
Connection: keep-alive
ETag: "67a34638-267"
Accept-Ranges: bytes[root@master ~]# kubectl exec -it test-demo-54449d9d85-pn56j -- curl -I http://10.244.186.221
HTTP/1.1 200 OK
Server: nginx/1.27.4
Date: Thu, 27 Mar 2025 07:24:49 GMT
Content-Type: text/html
Content-Length: 615
Last-Modified: Wed, 05 Feb 2025 11:06:32 GMT
Connection: keep-alive
ETag: "67a34638-267"
Accept-Ranges: bytes[root@master ~]# kubectl exec -it test-demo-54449d9d85-pn56j -- curl -I http://dev-svc.dev.svc.cluster.local:8080
HTTP/1.1 200 OK
Server: nginx/1.27.4
Date: Thu, 27 Mar 2025 07:25:17 GMT
Content-Type: text/html
Content-Length: 615
Last-Modified: Wed, 05 Feb 2025 11:06:32 GMT
Connection: keep-alive
ETag: "67a34638-267"
Accept-Ranges: bytes使用default名称空间下带有其它标签的pod访问
[root@master ~]# kubectl exec -it nginx-deployment-6d758bfc44-gg2sw  -- curl -I http://dev-svc.dev.svc.cluster.local:8080
^Ccommand terminated with exit code 130
[root@master ~]# kubectl exec -it nginx-deployment-6d758bfc44-gg2sw  -- curl -I http://10.244.186.221
^Ccommand terminated with exit code 130
[root@master ~]# kubectl exec -it nginx-deployment-6d758bfc44-gg2sw  -- curl -I http://10.244.140.88
^Ccommand terminated with exit code 130
场景 3:允许特定外部 IP
egress:
- to:- ipBlock:cidr: 10.0.0.0/8
场景 4:允许访问 Kubernetes DNS
egress:
- to:- namespaceSelector: {}podSelector:matchLabels:k8s-app: kube-dnsports:- protocol: UDPport: 53

场景 5: 创建NetworkPolicy2 放行dev名称空间
  • 规则1: 标签匹配的名称空间所有流量都能访问dev下所有Pod;
  • 规则2: 除了app名称空间,其它所有名称空间都可以访问dev下的 80端口
  • 组合使用,会以最大允许权限为最优匹配权限
[root@master ~]# kubectl get ns --show-labels
NAME               STATUS   AGE     LABELS
app                Active   22h     kubernetes.io/metadata.name=app,resource=app,system=app
calico-apiserver   Active   7d22h   kubernetes.io/metadata.name=calico-apiserver,name=calico-apiserver,pod-security.kubernetes.io/enforce-version=latest,pod-security.kubernetes.io/enforce=restricted
calico-system      Active   7d22h   kubernetes.io/metadata.name=calico-system,name=calico-system,pod-security.kubernetes.io/enforce-version=latest,pod-security.kubernetes.io/enforce=privileged
default            Active   7d23h   kubernetes.io/metadata.name=default
dev                Active   22h     kubernetes.io/metadata.name=dev,resource=dev
kube-node-lease    Active   7d23h   kubernetes.io/metadata.name=kube-node-lease
kube-public        Active   7d23h   kubernetes.io/metadata.name=kube-public
kube-system        Active   7d23h   kubernetes.io/metadata.name=kube-system
tigera-operator    Active   7d22h   kubernetes.io/metadata.name=tigera-operator,name=tigera-operator,pod-security.kubernetes.io/enforce=privileged[root@master networkpolicy]# cat netpol-dev-ingress.yml 
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:name: input-dev-resourcenamespace: dev #指定dev名称空间
spec:podSelector:  #定义pod的标签选择器matchLabels:  #选择带有某个标签的podapp: demoapp  #dev名称空间下带有这个标签的pod生效release: stablepolicyTypes: #策略类型- Ingress #入站ingress: #入站规则- from: - namespaceSelector: #指定名称空间的标签matchExpressions: #多标签的匹配模式- key: kubernetes.io/metadata.nameoperator: In #包含values: [default,kube-system] #name的值为指定内容的标签名称空间下的资源可以访问dev名称空间下带有指定标签pod的80端口ports:  #定义允许访问的端口- port: 80 #目标 Pod 的实际端口(非 Service 端口)[root@master networkpolicy]# kubectl apply -f netpol-dev-ingress.yml 
networkpolicy.networking.k8s.io/input-dev-resource created
[root@master networkpolicy]# kubectl get netpol -n dev 
NAME                 POD-SELECTOR                  AGE
deny-all-ingress     <none>                        32m
input-dev-resource   app=demoapp,resource=latest   7s[root@master networkpolicy]# kubectl describe netpol -n dev input-dev-resource
Name:         input-dev-resource
Namespace:    dev
Created on:   2025-03-26 17:41:34 +0800 CST
Labels:       <none>
Annotations:  <none>
Spec:PodSelector:     app=demoapp,resource=latestAllowing ingress traffic:To Port: 80/TCPFrom:NamespaceSelector: kubernetes.io/metadata.name in (default,kube-system)Not affecting egress trafficPolicy Types: Ingress
  • 在app名称空间下访问dev名称空间
  • 80端口测试 依然无法访问 没有匹配到符合规则的条目
[root@master ~]# kubectl get pod -n app 
NAME                                   READY   STATUS    RESTARTS      AGE
deployment-demo-app-7c469bff9d-cdm5q   1/1     Running   1 (51m ago)   22h
deployment-demo-app-7c469bff9d-hs4v7   1/1     Running   1             22h[root@master ~]# kubectl exec -it deployment-demo-app-7c469bff9d-cdm5q -n app  -- /bin/bash
root@deployment-demo-app-7c469bff9d-cdm5q:/# curl -I http://10.244.140.88
^C
root@deployment-demo-app-7c469bff9d-cdm5q:/# curl -I http://10.244.186.221
^C
root@deployment-demo-app-7c469bff9d-cdm5q:/# curl -I http://dev-svc.dev.svc.cluster.local:8080
^C
  • 当名称空间有两个标签时需要同时指定,如果只指定其中一个,将不生效
[root@master networkpolicy]# cat netpol-dev-ingress.yml 
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:name: input-dev-resourcenamespace: dev
spec:podSelector:matchLabels:app: demoapprelease: stablepolicyTypes:- Ingressingress:- from:- namespaceSelector:matchExpressions:- key: systemoperator: Invalues: [app]- from:- namespaceSelector:matchExpressions:- key: resourceoperator: Invalues: [app]ports:- port: 80[root@master networkpolicy]# kubectl apply -f netpol-dev-ingress.yml
networkpolicy.networking.k8s.io/input-dev-resource configured
  • 测试在app名称空间下访问dev名称空间
[root@master networkpolicy]# kubectl exec -it deployment-demo-app-7c469bff9d-cdm5q -n app  -- /bin/bash
root@deployment-demo-app-7c469bff9d-cdm5q:/# curl -I http://dev-svc.dev.svc.cluster.local:8080
HTTP/1.1 200 OK
Server: nginx/1.27.4
Date: Wed, 26 Mar 2025 12:37:22 GMT
Content-Type: text/html
Content-Length: 615
Last-Modified: Wed, 05 Feb 2025 11:06:32 GMT
Connection: keep-alive
ETag: "67a34638-267"
Accept-Ranges: bytesroot@deployment-demo-app-7c469bff9d-cdm5q:/# curl -I http://10.244.186.221                    
HTTP/1.1 200 OK
Server: nginx/1.27.4
Date: Thu, 27 Mar 2025 07:40:35 GMT
Content-Type: text/html
Content-Length: 615
Last-Modified: Wed, 05 Feb 2025 11:06:32 GMT
Connection: keep-alive
ETag: "67a34638-267"
Accept-Ranges: bytes

五、调试技巧

  1. 验证策略是否生效

    # kubectl describe networkpolicy <policy-name>[root@master networkpolicy]# kubectl describe  netpol -n dev input-dev-resource
    Name:         input-dev-resource
    Namespace:    dev
    Created on:   2025-03-26 17:41:34 +0800 CST
    Labels:       <none>
    Annotations:  <none>
    Spec:PodSelector:     app=demoapp,release=stableAllowing ingress traffic:To Port: 80/TCPFrom:NamespaceSelector: kubernetes.io/metadata.name in (default,kube-system)Not affecting egress trafficPolicy Types: Ingress
    
  2. 检查 Pod 标签和命名空间

    # kubectl get pods --show-labels -n <namespace>
    # kubectl get namespaces --show-labels
    
  3. 网络插件工具

    • Calico:使用 calicoctl 查看端点策略。
    • Cilium:运行 cilium connectivity test

六、注意事项

  1. CNI 插件支持:确认集群网络插件支持 Network Policy(如 Calico、Cilium)。
  2. 默认允许:未定义任何策略时,所有流量默认放行。
  3. 端口范围:不支持端口范围(需逐个指定)。
  4. 协议限制:仅支持 TCP/UDP,不支持 ICMP 或其他协议。

通过精确配置这些字段,可以实现 Kubernetes 集群内精细化的网络隔离,保障应用的安全性。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/73823.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

SpringBoot (一) 自动配置原理

目录 一 自动配置 1:数据源的手动配置 1:SpringBoot的自动配置 二 自动配置的完整流程&#xff1a;&#xff08;底层&#xff09; 1. 场景化依赖与Starter机制 2. 主程序入口与注解驱动 3. 自动配置类的加载与筛选 4. 自动配置类的实现逻辑 5. 自动配置的触发与执行流…

OJ题:移动零

双指针法 c 语言实现 void moveZeroes(int* nums, int numsSize) {int dest,cur; //创建临时指针和目标指针destcur0;//出初始化while(cur<numsSize)//遍历{if(nums[cur]!0){swap(&nums[cur],&nums[dest]);cur;dest;}else{cur;}}} 思路是建立两个指针&#xff0…

pycharm终端操作远程服务器

pycharm项目已经连接了远程服务器&#xff0c;但是打开终端&#xff0c;却依旧显示的是本地的那个环境&#xff0c;也就是说没有操作远程的那个环境。只能再使用Xshell去操作远程环境&#xff0c;很麻烦&#xff0c;找了下教程。 来源&#xff1a;https://blog.csdn.net/maolim…

实战篇Redis

黑马程序员的Redis的笔记&#xff08;后面补一下图片&#xff09; 【黑马程序员Redis入门到实战教程&#xff0c;深度透析redis底层原理redis分布式锁企业解决方案黑马点评实战项目】https://www.bilibili.com/video/BV1cr4y1671t?p72&vd_source001f1c33a895eb5ed820b9a4…

Reactive编程:什么是Reactive编程?Reactive编程思想

文章目录 **1. Reactive编程概述****1.1 什么是Reactive编程&#xff1f;****1.1.1 Reactive编程的定义****1.1.2 Reactive编程的历史****1.1.3 Reactive编程的应用场景****1.1.4 Reactive编程的优势** **1.2 Reactive编程的核心思想****1.2.1 响应式&#xff08;Reactive&…

异步转同步,实现一个消息队列

有一个场景&#xff0c;需要实现一个消息队列&#xff0c;要求 1&#xff0c;3&#xff0c;4 秒后&#xff0c;依次打印 1&#xff0c;2&#xff0c;3&#xff0c;如下&#xff1a; 其实考察的是怎么用同步的方式实现异步。 本文总结了四种方式实现&#xff1a;常规嵌套、prom…

求职笔试题

PDD 最长公共子序列 1143-最长公共子序列 class Solution:def longestCommonSubsequence(self, text1: str, text2: str) -> int:"""二维动态规划"""m, n len(text1), len(text2)# dp [[0]* (n1)] * (m1) 这种写法错误&#xff0c;m1行…

Android 中实现一个自定义的 AES 算法

版权归作者所有&#xff0c;如有转发&#xff0c;请注明文章出处&#xff1a;https://cyrus-studio.github.io/blog/ 前言 AES&#xff08;Advanced Encryption Standard&#xff0c;高级加密标准&#xff09; 是一种 对称加密算法&#xff0c;用于加密和解密数据。AES 由 美国…

小河:团队金牌精准计划

【趋势识别与预测】 数据趋势分析在随机序列研究中首要价值在于识别潜在规律并提升预测能力。随机序列常表现为无规则波动&#xff0c;但通过滑动平均、指数平滑、小波变换等方法&#xff0c;可剥离噪声干扰&#xff0c;提取长期趋势或周期性成分。例如&#xff0c;在金融时间序…

S32K144外设实验(七):FTM输出多路互补带死区PWM

文章目录 1. 概述1.1 时钟系统1.2 实验目的2. 代码的配置2.1 时钟配置2.2 FTM模块配置2.3 输出引脚配置2.4 API函数调用1. 概述 互补对的PWM输出是很重要的外设功能,尤其应用再无刷电机的控制。 1.1 时钟系统 笔者再墨迹一遍时钟的设置,因为很重要。 FTM的CPU接口时钟为SY…

数据结构与算法:算法分析

遇到的问题&#xff0c;都有解决方案&#xff0c;希望我的博客能为您提供一点帮助。 本篇参考《Data Structures and Algorithm Analysis in C》 “在程序设计中&#xff0c;不仅要写出能工作的程序&#xff0c;更要关注程序在大数据集上的运行时间。” 本章讨论要点&#xf…

排序--归并排序

一&#xff0c;引言 归并排序作为七大排序中一种&#xff0c;本文将讲解其排序原理和代码实现。 二&#xff0c;逻辑讲解 来看一组动图&#xff1a; 首先先进行大逻辑的讲解&#xff0c;在一个乱序的数组中如图&#xff1a; 通过递归进行一次次分组如图&#xff1a; 分组逻…

React程序打包与部署

===================== 推荐超级课程: 本地离线DeepSeek AI方案部署实战教程【完全版】Docker快速入门到精通Kubernetes入门到大师通关课AWS云服务快速入门实战目录 为生产环境准备React应用最小化和打包环境变量错误处理部署到托管服务部署到Netlify探索高级主题:Hooks、Su…

Spring Data审计利器:@LastModifiedDate详解(依赖关系补充篇)!!!

&#x1f552; Spring Data审计利器&#xff1a;LastModifiedDate详解&#x1f525;&#xff08;依赖关系补充篇&#xff09; &#x1f50c; 核心依赖解析 使用LastModifiedDate必须知道的依赖关系 #mermaid-svg-qm1OUa9Era9ktbeK {font-family:"trebuchet ms",verd…

接口测试中数据库验证,怎么解决?

在接口测试中&#xff0c;通常需要在接口调用前后查询数据库&#xff0c;以验证接口操作是否正确影响了数据库状态。​这可以通过数据库断言来实现&#xff0c;PyMySQL库常用于连接和操作MySQL数据库。​通过该库&#xff0c;可以在测试中执行SQL语句&#xff0c;查询或修改数据…

游戏引擎学习第189天

今天的回顾与计划 在昨天&#xff0c;我们花了一些时间来优化调试数据的收集方法&#xff0c;并且在调试界面中增加了一些界面代码&#xff0c;使得我们可以悬停在不同的元素上&#xff0c;查看相关信息。今天的任务是对这些数据进行更多的操作&#xff0c;进行一些有趣的实验…

智能粉尘监测解决方案|守护工业安全,杜绝爆炸隐患

在厂房轰鸣的生产线上&#xff0c;一粒微小粉尘的聚集可能成为一场灾难的导火索。如何实现粉尘浓度的精准监控与快速响应&#xff1f;我们为您打造了一套"感知-预警-处置"全闭环的智能安全方案&#xff01; 行业痛点&#xff1a;粉尘管理的生死线 在金属加工、化工…

Axure设计之中继器表格——拖动行排序教程(中继器)

一、原理介绍 在Axure中实现表格行的拖动排序&#xff0c;主要依赖于中继器的排序事件。然而要实现拖动效果&#xff0c;就必须结合动态面板&#xff0c;因为动态面板可以设置拖动事件&#xff0c;之所以使用动态面板或许是因为它可以更灵活地处理位置变化。用户拖动行时&…

分布式渲染与云渲染:技术与应用的黄金搭档

一、核心概念&#xff1a;先区分再关联 分布式渲染是通过多台设备并行计算拆分渲染任务的技术&#xff08;如将一帧拆分为 64 个小块&#xff0c;64 台电脑同时渲染&#xff09;&#xff1b; 云渲染是基于云计算的渲染服务&#xff0c;本质是分布式渲染的商业化落地—— 用户无…

鼠标在客户区内按下左键和双击右键

书籍&#xff1a;《Visual C 2017从入门到精通》的2.6鼠标 环境&#xff1a;visual studio 2022 内容&#xff1a;【例2.44】鼠标在客户区内按下左键和双击右键 1.创建一个单文档程序 一个简单的单文档程序-CSDN博客https://blog.csdn.net/qq_20725221/article/details/1463…