• 【Kubernetes中Gateway和ServiceEntry使用、SDS认证授权等使用】



    Kubernetes中的Gateway和ServiceEntry是实现服务网格的重要组件,提供了不同层次的流量控制和服务发现功能。SDS认证授权是服务网格的安全策略之一,通过将证书和密钥集中管理,可以实现对服务间通信的严格控制和保护。

    下面分别介绍一下这些功能的使用方法:

    1. Gateway和ServiceEntry使用

    Gateway是实现Kubernetes服务网格中对外暴露服务的组件,可以根据请求的路径、域名等条件将请求转发到不同的服务。

    ServiceEntry允许将外部服务注册到服务网格中,使得Kubernetes集群中的其他服务可以直接访问外部服务。同时也可以配置对外部服务的访问策略,例如负载均衡、重试、超时等。

    下面是基于 Istio 的 Kubernetes Gateway 和 ServiceEntry 的代码示例:

    Gateway:

    apiVersion: networking.istio.io/v1alpha3
    kind: Gateway
    metadata:
      name: my-gateway
      namespace: my-namespace
    spec:
      selector:
        istio: ingressgateway # 或者其他 ingress gateway
      servers:
        - port:
            number: 80
            name: http
            protocol: HTTP
          hosts:
            - my-service.example.com
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15

    这个 Gateway 配置说明:当请求 my-service.example.com 的时候,会流量会转发到相应的 Service 上。

    ServiceEntry:

    apiVersion: networking.istio.io/v1alpha3
    kind: ServiceEntry
    metadata:
      name: my-service-entry
      namespace: my-namespace
    spec:
      hosts:
        - my-service.example.com
      exportTo:
        - .
        - some-other-namespace
      location: MESH_EXTERNAL
      ports:
        - number: 80
          name: http
          protocol: HTTP
      resolution: DNS
      endpoints:
        - address: 10.0.1.1 # 替换为实际 Service 的 IP 地址
          ports:
            http: 8080 # 替换为实际 Service 的端口号
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21

    这个 ServiceEntry 配置说明:当请求 my-service.example.com 的时候,会使用 DNS 解析到配置的 Service IP 和端口,并且可以导出到当前命名空间和 some-other-namespace 命名空间。

    2. SDS认证授权使用

    SDS是Service Discovery Service的缩写,是Kubernetes中实现服务认证和授权的一种方式。SDS使用xDS协议与Envoy代理通信,将服务间通信的证书、密钥等敏感信息集中管理,并通过TLS加密方式传递,确保安全可靠。

    SDS认证授权的具体步骤如下:

    • 配置服务端的证书和密钥,在Kubernetes中使用Secret对象管理;
    • 配置客户端的证书和密钥,并将其注入到服务的容器中;
    • 在服务网格中配置服务之间的TLS认证和授权策略,使用Envoy代理实现。

    需要注意的是,在使用SDS时需要谨慎配置和管理证书和密钥,以避免泄漏和滥用。

    以下是使用Kubernetes SDS(Secure Discovery and SNI)进行认证和授权的代码示例:

    1. 部署Istio服务网格

    要使用SDS,需要在Kubernetes集群中部署Istio服务网格。可以使用以下命令将Istio安装文件部署到Kubernetes集群中:

    $ istioctl install
    
    • 1

    2. 配置SDS

    下一步是配置Istio以使用SDS。使用以下命令为Istio Citadel配置SDS:

    $ kubectl apply -f <(istioctl kube-inject -f samples/httpbin/httpbin.yaml)
    
    • 1

    这将在Istio中启用SDS,并使用httpbin应用程序进行测试。

    3. 确认Istio SDS已启用

    可以使用以下命令检查Istio SDS是否已启用:

    $ kubectl get deploy istio-citadel -n istio-system -o jsonpath='{.spec.template.spec.containers[0].args[*]}'
    
    • 1

    如果SDS已启用,则应该看到以下输出:

    --sds-enabled=true
    
    • 1

    4. 配置认证和授权策略

    接下来,需要为SDS配置认证和授权策略。可以使用以下命令为Istio Citadel配置策略:

    $ kubectl apply -f config/samples/citadel/istio-auth.yaml
    
    • 1

    这将在Istio Citadel中启用基于mTLS的双向认证,并允许仅通过受信任的根证书来验证客户端证书。

    5. 配置Kubernetes Secrets

    要使用SDS进行认证和授权,需要在Kubernetes中创建Secrets。可以使用以下命令将客户端证书和密钥放入Kubernetes Secrets中:

    $ kubectl create secret tls httpbin-client-cert --cert=client.pem --key=client.key -n httpbin
    
    • 1

    这将在httpbin命名空间中创建名为httpbin-client-cert的Kubernetes Secrets,并将客户端证书和密钥放入其中。

    6. 更新Istio Gateway配置

    最后,需要更新Istio Gateway配置,以便使用SDS进行认证和授权。可以使用以下命令将密钥和证书信息添加到Istio Gateway配置中:

    $ kubectl patch gateway httpbin-gateway -n httpbin --patch "$(cat config/samples/httpbin/httpbin-gateway-secure.yaml)"
    
    • 1

    这将更新Istio Gateway配置,以使用SDS进行基于mTLS的双向认证。

    现在,SDS已经配置完毕,可以使用以上步骤中提到的httpbin应用程序进行测试。

  • 相关阅读:
    List 对象集合,如何优雅地返回给前端?
    逃避型人格分析,如何改变逃避型性格?
    十年内自学编程
    leecode 206.反转链表
    Latte:一个类似Sora的开源视频生成项目
    音乐推荐与管理系统Python+Django网页界面+协同过滤推荐算法
    1100w播放、45w涨粉!黑马UP在B站20天逆袭登顶!
    【数学】分数到小数 巧用MAP获取循环小数
    PMP_第5章章节试题
    Acer宏碁掠夺者战斧300笔记本电脑PH315-52工厂模式原装Win10系统安装包 恢复出厂开箱状态 带恢复重置
  • 原文地址:https://blog.csdn.net/java_wxid/article/details/131045725