在Kubernetes集群中,Ingress是用于暴露HTTP和HTTPS服务的一种资源类型。它可以根据域名、路径和端口将流量路由到不同的服务,为开发人员提供了便利。Ingress控制器支持通过配置黑白名单来控制哪些IP地址可以访问服务。
创建Deployment和Service
首先,我们需要创建一个Deployment和一个Service,用于提供一个HTTP服务。这里我们创建一个名为“my-service”的Deployment和一个Service,并将它们暴露在80端口上。
代码语言:javascript复制apiVersion: apps/v1
kind: Deployment
metadata:
name: my-service
spec:
selector:
matchLabels:
app: my-service
replicas: 2
template:
metadata:
labels:
app: my-service
spec:
containers:
- name: my-service
image: nginx:1.19.10
ports:
- containerPort: 80
---
apiVersion: v1
kind: Service
metadata:
name: my-service
spec:
selector:
app: my-service
ports:
- name: http
port: 80
targetPort: 80
type: ClusterIP
创建Ingress规则
接下来,我们创建一个Ingress规则,用于将流量路由到“my-service”服务上。这里我们使用一个名为“example.com”的域名,并将流量路由到“/”路径。
代码语言:javascript复制apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
name: my-ingress
annotations:
nginx.ingress.kubernetes.io/whitelist-source-range: "192.168.0.0/16,10.0.0.0/8"
spec:
rules:
- host: example.com
http:
paths:
- path: /
backend:
serviceName: my-service
servicePort: http
在上面的代码中,我们使用了一个名为“nginx.ingress.kubernetes.io/whitelist-source-range”的注释来实现黑白名单。该注释允许您配置允许或拒绝的IP地址范围。在本例中,我们允许IP地址以“192.168.0.0/16”和“10.0.0.0/8”开头的请求访问服务。
验证
现在我们已经创建了Ingress规则,可以测试它是否工作。我们可以使用curl命令模拟一个HTTP请求,并通过指定一个不在允许列表中的IP地址来测试黑白名单。
代码语言:javascript复制$ curl -H "Host: example.com" http://<ingress-ip-address>/ --header "X-Forwarded-For: 172.16.0.1"
在上面的命令中,我们使用了“X-Forwarded-For”标头来模拟一个不在允许列表中的IP地址。在实际环境中,该标头将由Ingress控制器自动添加。如果一切正常,您将看到一个类似于“403 Forbidden”的响应。
另外,您也可以通过使用允许的IP地址来测试黑白名单。在这种情况下,您将收到一个HTTP 200响应。
代码语言:javascript复制$ curl -H "Host: example.com" http://<ingress-ip-address>/ --header "X-Forwarded-For: 192.168.0.1"
在上面的命令中,我们使用了一个在允许列表中的IP地址,您应该能够看到服务的输出。