在Kubernetes(K8S)中,我们经常会遇到需要配置网络策略的场景,以保障应用程序的安全性。有时候,我们可能会遇到需要让某些服务可以被内部访问,但不能被外部的Curl访问到的情况。本文将详细介绍如何实现在Kubernetes集群中通过配置网络策略,实现"K8S Tomcat可以被访问,但不能被Curl访问"的需求。

#### **整体流程概述**
为了实现"K8S Tomcat可以被访问,但不能被Curl访问"的目标,我们需要进行以下步骤:
步骤|操作
-|-
1|创建Deployment和Service部署Tomcat应用
2|创建NetworkPolicy定义网络策略,限制Curl访问

#### **具体操作步骤及代码示例**
下面我们将具体介绍每一步需要进行的操作,并给出相应的代码示例。

##### **步骤1:创建Deployment和Service部署Tomcat应用**
首先,我们需要创建一个Deployment和一个Service,部署Tomcat应用,并暴露Service用于内部访问。

```yaml
# tomcat-deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: tomcat-deployment
spec:
replicas: 1
selector:
matchLabels:
app: tomcat
template:
metadata:
labels:
app: tomcat
spec:
containers:
- name: tomcat
image: tomcat:latest
ports:
- containerPort: 8080

---
# tomcat-service.yaml
apiVersion: v1
kind: Service
metadata:
name: tomcat-service
spec:
selector:
app: tomcat
ports:
- protocol: TCP
port: 8080
targetPort: 8080
```

使用以下命令创建Deployment和Service:

```bash
kubectl apply -f tomcat-deployment.yaml
kubectl apply -f tomcat-service.yaml
```

##### **步骤2:创建NetworkPolicy定义网络策略,限制Curl访问**
接下来,我们需要定义一个NetworkPolicy,限制对Tomcat应用的Curl访问。这里我们基于标签选择器,限制只有特定的Pod才能访问Tomcat应用。

```yaml
# tomcat-network-policy.yaml
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
name: tomcat-network-policy
spec:
podSelector:
matchLabels:
app: tomcat
policyTypes:
- Ingress
ingress:
- from:
- podSelector:
matchLabels:
allowed: "true"
```

使用以下命令创建NetworkPolicy:

```bash
kubectl apply -f tomcat-network-policy.yaml
```

通过上述步骤,我们已经成功实现了"K8S Tomcat可以被访问,但不能被Curl访问"的需求。现在,只有标签中带有`allowed: "true"`的Pod才能够访问Tomcat应用,而其他Pod或者通过Curl请求的方式将无法访问到该应用。

希望通过本文的介绍,您能够清晰地了解如何在Kubernetes集群中配置网络策略,限制特定服务的访问,提高应用程序的安全性。祝您在使用Kubernetes时顺利实现您所需的网络策略配置!