15.6. 验证


15.6.1. 部署示例应用程序

要测试出口 IP 规则,请创建一个仅限于我们指定的出口 IP 地址的服务。这会模拟一个外部服务,该服务预期一小部分 IP 地址。

  1. 运行 echoserver 命令以复制请求:

    $ oc -n default run demo-service --image=gcr.io/google_containers/echoserver:1.4
  2. 运行以下命令,将 pod 公开为服务,并将入口限制为您指定的出口 IP 地址:

    $ cat <<EOF | oc apply -f -
    apiVersion: v1
    kind: Service
    metadata:
      name: demo-service
      namespace: default
      annotations:
        service.beta.kubernetes.io/aws-load-balancer-scheme: "internal"
        service.beta.kubernetes.io/aws-load-balancer-internal: "true"
    spec:
      selector:
        run: demo-service
      ports:
        - port: 80
          targetPort: 8080
      type: LoadBalancer
      externalTrafficPolicy: Local
      # NOTE: this limits the source IPs that are allowed to connect to our service.  It
      #       is being used as part of this demo, restricting connectivity to our egress
      #       IP addresses only.
      # NOTE: these egress IPs are within the subnet range(s) in which my worker nodes
      #       are deployed.
      loadBalancerSourceRanges:
        - 10.10.100.254/32
        - 10.10.150.254/32
        - 10.10.200.254/32
        - 10.10.100.253/32
        - 10.10.150.253/32
        - 10.10.200.253/32
    EOF
  3. 运行以下命令,检索负载均衡器主机名并将其保存为环境变量:

    $ export LOAD_BALANCER_HOSTNAME=$(oc get svc -n default demo-service -o json | jq -r '.status.loadBalancer.ingress[].hostname')

15.6.2. 测试命名空间出口

  1. 启动交互式 shell 以测试命名空间出站规则:

    $ oc run \
      demo-egress-ns \
      -it \
      --namespace=demo-egress-ns \
      --env=LOAD_BALANCER_HOSTNAME=$LOAD_BALANCER_HOSTNAME \
      --image=registry.access.redhat.com/ubi9/ubi -- \
      bash
  2. 向负载均衡器发送请求并确保您可以成功连接:

    $ curl -s http://$LOAD_BALANCER_HOSTNAME
  3. 检查输出是否成功连接:

    注意

    client_address 是负载均衡器的内部 IP 地址,而不是您的出口 IP。您可以通过将服务连接到 .spec.loadBalancerSourceRanges 来验证客户端地址是否已正确配置。

    输出示例

    CLIENT VALUES:
    client_address=10.10.207.247
    command=GET
    real path=/
    query=nil
    request_version=1.1
    request_uri=http://internal-a3e61de18bfca4a53a94a208752b7263-148284314.us-east-1.elb.amazonaws.com:8080/
    
    SERVER VALUES:
    server_version=nginx: 1.10.0 - lua: 10001
    
    HEADERS RECEIVED:
    accept=*/*
    host=internal-a3e61de18bfca4a53a94a208752b7263-148284314.us-east-1.elb.amazonaws.com
    user-agent=curl/7.76.1
    BODY:
    -no body in request-

  4. 运行以下命令来退出 pod:

    $ exit

15.6.3. 测试 pod 出口

  1. 启动交互式 shell 以测试 pod 出站规则:

    $ oc run \
      demo-egress-pod \
      -it \
      --namespace=demo-egress-pod \
      --env=LOAD_BALANCER_HOSTNAME=$LOAD_BALANCER_HOSTNAME \
      --image=registry.access.redhat.com/ubi9/ubi -- \
      bash
  2. 运行以下命令,向负载均衡器发送请求:

    $ curl -s http://$LOAD_BALANCER_HOSTNAME
  3. 检查输出是否成功连接:

    注意

    client_address 是负载均衡器的内部 IP 地址,而不是您的出口 IP。您可以通过将服务连接到 .spec.loadBalancerSourceRanges 来验证客户端地址是否已正确配置。

    输出示例

    CLIENT VALUES:
    client_address=10.10.207.247
    command=GET
    real path=/
    query=nil
    request_version=1.1
    request_uri=http://internal-a3e61de18bfca4a53a94a208752b7263-148284314.us-east-1.elb.amazonaws.com:8080/
    
    SERVER VALUES:
    server_version=nginx: 1.10.0 - lua: 10001
    
    HEADERS RECEIVED:
    accept=*/*
    host=internal-a3e61de18bfca4a53a94a208752b7263-148284314.us-east-1.elb.amazonaws.com
    user-agent=curl/7.76.1
    BODY:
    -no body in request-

  4. 运行以下命令来退出 pod:

    $ exit

15.6.4. 可选:测试会阻止的出口

  1. 可选: 运行以下命令来测试当出口规则没有应用时流量被成功阻止:

    $ oc run \
      demo-egress-pod-fail \
      -it \
      --namespace=demo-egress-pod \
      --env=LOAD_BALANCER_HOSTNAME=$LOAD_BALANCER_HOSTNAME \
      --image=registry.access.redhat.com/ubi9/ubi -- \
      bash
  2. 运行以下命令,向负载均衡器发送请求:

    $ curl -s http://$LOAD_BALANCER_HOSTNAME
  3. 如果命令失败,则出口可以成功阻止。
  4. 运行以下命令来退出 pod:

    $ exit
Red Hat logoGithubRedditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

© 2024 Red Hat, Inc.