如何使用Kubernetes里的NetworkPolicy

创建一个类型为NetworkPolicy的Kubernetes对象的yaml文件。

第九行的podSelector指定这个NetworkPolicy施加在哪些pod上,通过label来做pod的过滤。

从第16行开始的ingress定义,定义了只有具备标签component=ads,module=app的pod才能够连接component=ads, module=db的pod。

首先创建一个临时的pod,使用正确的label(component=ads,module=app)去访问db pod:

kubectl run --restart=Never -it --rm --image=postgres:9.6 --labels="component=ads,module=app" --env="PGCONNECT_TIMEOUT=5" helper --command -- /bin/bash

执行完毕后看到提示[email protected]:/#, 说明我通过上述命令创建的临时pod成功的连接到了postgreSQL的pod上。

输入正确的用户名和密码,能成功连接到postgreSQL pod提供的数据库服务上。

现在我们重新创建一个临时pod,不指定label,因此不满足NetworkPolicy里定义的限制条件,因此会看到我们期望的结果:postgreSQL连接失败。

希望通过例子大家能够理解Kubernetes里NetworkPolicy的工作原理。

要获取更多Jerry的原创文章,请关注公众号"汪子熙":

原文地址:https://www.cnblogs.com/sap-jerry/p/9998365.html

时间: 2024-07-31 23:00:18

如何使用Kubernetes里的NetworkPolicy的相关文章

kubernetes里let's encrypt通配符证书的自动续期更新

环境与需求: Ubuntu云服务器上,已经做好了ssl证书的免费申请,但是证书的期限是3个月,3个月到期后必须重新申请或者更新.由于k8s集群里的服务一直在使用证书,每三个月人工更新太麻烦,所以想要配置一些做个定时自动更新. 准备: 其中, certbot-auto 执行命令,可以对证书进行申请更新删除等一系列操作 dns_script 调用连接服务器控制台设置DNS校验记录的脚本 pytz python的一个模块 一.下载hook功能的脚本文件 git clone https://github

Kubernetes里的ConfigMap的用途

顾名思义,ConfigMap用于保存配置数据的键值对,可以用来保存单个属性,也可以用来保存配置文件. ConfigMap同Kubernetes的另一个概念secret类似,区别是ConfigMap主要用于保存不包含敏感信息的明文字符串. 创建方式: kubectl create configmap special-config --from-literal=i042416=jerry 上述命令行创建了一个名为special-config的键值对, key为i042416, 值为jerry 接下来

Kubernetes里的secret最基本的用法

Secret解决了密码.token.密钥等敏感数据的配置问题,使用Secret可以避免把这些敏感数据以明文的形式暴露到镜像或者Pod Spec中. Secret可以以Volume或者环境变量的方式使用. 使用如下命令行创建一个secret: kubectl create secret generic admin-access --from-file=./username.txt --from-file=./password.txt 输入文件username.txt和password.txt需要手

通过一个例子学习Kubernetes里的PersistentVolumeClaim的用法

Kubernetes的pod本身是无状态的(stateless),生命周期通常比较短,只要出现了异常,Kubernetes就会自动创建一个新的Pod来代替它. 而容器产生的数据,会随着Pod消亡而自动消失. 为了实现Pod内数据的存储管理,Kubernetes引入了两个API资源:Persistent Volume(持久卷,以下简称PV)和Persistent Volume Claim(持久卷申请,以下简称PVC). PV是Kubernetes集群中的一种网络存储实现,跟Node一样,也是属于集

Kubernetes 里,怎么让 Pod 有 DNS 记录?

在专栏"深入剖析Kubernetes"的第20章,我们学到很容易让一个 StatefulSet 中的 Pod 拥有 DNS 记录.如果一个 StatefulSet 的名字是 memcached, 而它指定了关联的 serviceName 叫 memcached-cluster,那 kube-dns 就会为它的每个 pod 解析如下的 DNS A 记录: memcached-0.memcached-cluster.svc.cluster.local memcached-1.memcach

如何在Kubernetes里给PostgreSQL创建secret

创建一个initdb.sql文件,输入如下内容: -- This is a postgres initialization script for the postgres container. -- Will be executed during container initialization ($> psql postgres -f initdb.sql) CREATE ROLE adsuser WITH LOGIN PASSWORD 'initial' INHERIT CREATEDB;

通过一个实际例子理解Kubernetes里pod的自动scale - 水平自动伸缩

kubectl scale命令用于程序在负载加重或缩小时进行pod扩容或缩小,我们通过一些实际例子来观察scale命令到底能达到什么效果. 命令行创建一个deployment: kubectl run jerry-nginx --image=nginx:1.12.2 kubectl get deploy查看刚刚创建的deployment: 自动被deployment创建的pod: kubectl get pod: 使用下列命令查看生成的deployment明细: kubectl get depl

如何在Kubernetes里创建一个Nginx应用

使用命令行kubectl run --image=nginx nginx-app --port=80 创建一个名为nginx-app的应用 结果: deployment.apps/nginx-app created 使用命令行kubectl get pods查看创建结果,状态已经为running: 使用命令行kubectl describe pods查看pod明细: 把pod id记下来: nginx-app-f75d46bd9-q6c76 使用该pod id可以执行一些命令: kubectl

Kubernetes NetworkPolicy工作原理浅析

Kubernetes能够把集群中不同Node节点上的Pod连接起来,并且默认情况下,每个Pod之间是可以相互访问的.但在某些场景中,不同的Pod不应该互通,这个时候就需要进行访问控制.那么如何实现呢? 简介 ??Kubernetes提供了NetworkPolicy的Feature,支持按Namespace和按Pod级别的网络访问控制.它利用label指定namespaces或pod,底层用iptables实现.这篇文章简单介绍Kubernetes NetworkPolicy在Calico上的工作