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

本文涉及的产品
容器服务 Serverless 版 ACK Serverless,952元额度 多规格
容器服务 Serverless 版 ACK Serverless,317元额度 多规格
简介: 【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

这个 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 的端口号

这个 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

2. 配置SDS

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

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

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

3. 确认Istio SDS已启用

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

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

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

--sds-enabled=true

4. 配置认证和授权策略

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

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

这将在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

这将在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)"

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

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


相关实践学习
通过Ingress进行灰度发布
本场景您将运行一个简单的应用,部署一个新的应用用于新的发布,并通过Ingress能力实现灰度发布。
容器应用与集群管理
欢迎来到《容器应用与集群管理》课程,本课程是“云原生容器Clouder认证“系列中的第二阶段。课程将向您介绍与容器集群相关的概念和技术,这些概念和技术可以帮助您了解阿里云容器服务ACK/ACK Serverless的使用。同时,本课程也会向您介绍可以采取的工具、方法和可操作步骤,以帮助您了解如何基于容器服务ACK Serverless构建和管理企业级应用。 学习完本课程后,您将能够: 掌握容器集群、容器编排的基本概念 掌握Kubernetes的基础概念及核心思想 掌握阿里云容器服务ACK/ACK Serverless概念及使用方法 基于容器服务ACK Serverless搭建和管理企业级网站应用
相关文章
|
6月前
|
Kubernetes 网络协议 网络安全
提升你的云技能:深入了解CKA认证之k8s升级秘籍!
提升你的云技能:深入了解CKA认证之k8s升级秘籍!
107 0
|
4月前
|
Prometheus Kubernetes Cloud Native
云原生周刊:Argo Rollouts 支持 Kubernetes Gateway API 1.0 | 2024.7.1
探索开源世界:Kubetools的推荐系统[Krs](https://github.com/kubetoolsca/krs)助力K8s优化,追踪K8s组件清单,指引IAC集成。阅读建议: Prometheus与Thanos的进化故事,Adidas容器平台管理经验,K8s请求实现详解。关注云原生:Argo Rollouts支持Gateway API 1.0,Kubewarden v1.14强化策略与镜像安全。
|
2月前
|
Kubernetes 容器
k8s基于secretRef认证对接rbd块设备
文章介绍了如何在Kubernetes集群中通过secretRef认证方式接入Ceph的RBD块设备,并提供了详细的步骤和配置文件示例。
43 7
|
2月前
|
Kubernetes 容器 Perl
k8s基于keyring文件认证对接rbd块设备
文章介绍了如何在Kubernetes集群中使用Ceph的keyring文件进行认证,并对接RBD块设备,包括使用admin用户和自定义用户两种方式的详细步骤和注意事项。
50 3
|
2月前
|
Kubernetes 安全 API
Kubernetes系统安全-授权策略(authorization policy)
文章主要介绍了Kubernetes系统中的授权策略,包括授权模块的概述、RBAC授权模块的详细说明以及如何创建和管理角色(Role)和集群角色(ClusterRole)。
59 0
Kubernetes系统安全-授权策略(authorization policy)
|
2月前
|
Kubernetes 安全 API
Kubernetes系统安全-认证(Authentication)
文章主要介绍了Kubernetes系统中的安全认证机制,包括API服务器的访问控制、认证、授权策略和准入控制,以及如何使用kubeconfig文件和创建自定义用户与服务账号。
154 0
Kubernetes系统安全-认证(Authentication)
|
5月前
|
Kubernetes 算法 API
K8S 集群认证管理
【6月更文挑战第22天】Kubernetes API Server通过REST API管理集群资源,关键在于客户端身份认证和授权。
|
6月前
|
Kubernetes 应用服务中间件 nginx
提升CKA认证成功率:Kubernetes Ingress七层代理全攻略!
提升CKA认证成功率:Kubernetes Ingress七层代理全攻略!
114 0
|
6月前
|
Kubernetes 应用服务中间件 数据安全/隐私保护
k8s 网络策略揭秘:CKA认证必备的网络知识全解析
k8s 网络策略揭秘:CKA认证必备的网络知识全解析
75 0
|
11月前
|
Kubernetes Cloud Native 数据安全/隐私保护
k8s 认证和权限控制
k8s 认证和权限控制
110 1