Istio 使用ingress和gateway两种方式公开服务

本文涉及的产品
注册配置 MSE Nacos/ZooKeeper,118元/月
可观测可视化 Grafana 版,10个用户账号 1个月
应用实时监控服务-用户体验监控,每月100OCU免费额度
简介: 本文档指导您完成Istio网关的部署与配置。首先安装`istiod`(步骤略过)。接着,创建`ingress.yaml`文件,定义Istio入口网关的服务、部署及权限设置,通过`kubectl apply -f ingress.yaml`命令应用。最后,创建Ingress资源,指定主机名、后端服务及TLS配置,实现对外部请求的路由管理。

安装istiod,本文略

创建Ingress Controller (这个是Ingress和Gateway都需要部署的)用来转发外部请求

创建ingress.yaml,参考文档地址: https://istio.io/latest/zh/docs/setup/additional-setup/gateway/#deploy-gateway

apiVersion: v1
kind: Service
metadata:
  name: istio-ingressgateway
  namespace: istio-ingress
spec:
  type: LoadBalancer
  selector:
    istio: ingressgateway
  ports:
  - port: 80
    name: http
  - port: 443
    name: https
---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: istio-ingressgateway
  namespace: istio-ingress
spec:
  selector:
    matchLabels:
      istio: ingressgateway
  template:
    metadata:
      annotations:
        # 选择网关注入模板(而不是默认的 Sidecar 模板)
        inject.istio.io/templates: gateway
      labels:
        # 为网关设置唯一标签。这是确保 Gateway 可以选择此工作负载所必需的
        istio: ingressgateway
        # 启用网关注入。如果后续连接到修订版的控制平面,请替换为 `istio.io/rev: revision-name`
        sidecar.istio.io/inject: "true"
    spec:
      # 允许绑定到所有端口(例如 80 和 443)
      securityContext:
        sysctls:
        - name: net.ipv4.ip_unprivileged_port_start
          value: "0"
      containers:
      - name: istio-proxy
        image: auto # 每次 Pod 启动时,该镜像都会自动更新。
        # 放弃所有 privilege 特权,允许以非 root 身份运行
        securityContext:
          capabilities:
            drop:
            - ALL
          runAsUser: 1337
          runAsGroup: 1337
---
# 设置 Role 以允许读取 TLS 凭据
apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:
  name: istio-ingressgateway-sds
  namespace: istio-ingress
rules:
- apiGroups: [""]
  resources: ["secrets"]
  verbs: ["get", "watch", "list"]
---
apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:
  name: istio-ingressgateway-sds
  namespace: istio-ingress
roleRef:
  apiGroup: rbac.authorization.k8s.io
  kind: Role
  name: istio-ingressgateway-sds
subjects:
- kind: ServiceAccount
  name: default
kubectl apply -f ingress.yaml

Ingress方式访问

创建ingress

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: ingress-name
  namespace: your-ns # 你的命名空间
spec:
  ingressClassName: istio # 固定为istio
  rules:
  - host: demo.abc.com
    http:
      paths:
      - backend:
          service:
            name: xxx-svc # 换成你的后端svc
            port:
              number: 8080 # 换成你的后端svc的端口
        path: /
        pathType: Prefix
  tls:
  - hosts:
    - demo.abc.com
    secretName: secret-tls # 换成你的证书,并且,这个证书要和`istio-ingressgateway`在同一个命名空间

使用Gateway api

参考文档: https://istio.io/latest/zh/docs/tasks/traffic-management/ingress/gateway-api/#manual-deployment

apiVersion: gateway.networking.k8s.io/v1
kind: Gateway
metadata:
  name: gateway
  namespace: istio-ingress
spec:
  gatewayClassName: istio
  addresses:
  - value: istio-ingressgateway.istio-ingress.svc.cluster.local
    type: Hostname
  listeners:
  - name: default
    hostname: "*.abc.com"
    port: 80
    protocol: HTTP
    allowedRoutes:
      namespaces:
        from: All

创建HttpRoute

apiVersion: gateway.networking.k8s.io/v1
kind: HTTPRoute
metadata:
  name: micro-identity
  namespace: your-ns # 你的命名空间
spec:
  parentRefs:
  - name: gateway
    namespace: istio-ingress
  hostnames: ["demo.abc.com"]
  rules:
  - matches:
    - path:
        type: PathPrefix
        value: /
    backendRefs:
    - name: xxx-svc
      port: 8080
相关实践学习
通过Ingress进行灰度发布
本场景您将运行一个简单的应用,部署一个新的应用用于新的发布,并通过Ingress能力实现灰度发布。
容器应用与集群管理
欢迎来到《容器应用与集群管理》课程,本课程是“云原生容器Clouder认证“系列中的第二阶段。课程将向您介绍与容器集群相关的概念和技术,这些概念和技术可以帮助您了解阿里云容器服务ACK/ACK Serverless的使用。同时,本课程也会向您介绍可以采取的工具、方法和可操作步骤,以帮助您了解如何基于容器服务ACK Serverless构建和管理企业级应用。 学习完本课程后,您将能够: 掌握容器集群、容器编排的基本概念 掌握Kubernetes的基础概念及核心思想 掌握阿里云容器服务ACK/ACK Serverless概念及使用方法 基于容器服务ACK Serverless搭建和管理企业级网站应用
目录
相关文章
|
JSON Rust 安全
Istio Ambient Mesh Ztunnel实现剖析(1)配置解析
前言在Istio Ambient Mesh中,社区引入了名为ztunnel的新组件,ztunnel的名字来源于Zero-Trust Tunnel,即零信任管道,Ztunnel 旨在专注于Ambient Mesh中工作负载4层安全能力,例如 mTLS、身份验证、L4 授权,而无需进行七层流量解析。ztunnel 确保流量高效、安全地传输到负责七层处理的Waypoint Proxy或在对端无waypo
394 0
|
负载均衡 Kubernetes API
Istio:Gateway设计与实现
Istio:Gateway设计与实现
1041 0
Istio:Gateway设计与实现
|
容器 微服务 Kubernetes
带你读《Istio入门与实战》之一:服务网格与Istio
本书系统化介绍Istio技术要点与应用技巧,可帮助读者快速搭建微服务架构并进行管理。主要内容包括:service mesh基本概念与使用,Istio架构设计与主要功能,快速搭建一个微服务实验,介绍如何让服务流量控制更简单,让服务更具弹性,让服务故障测试更容易,让服务通信更安全可控,让服务更易观测与监控,以及istio维护方案。本书内容丰富、案例讲解,实用性强,非常适合入门级读者快速掌握Istio技术。
|
23天前
|
应用服务中间件 nginx
创建Istio
此教程介绍如何使用 Helm 安装 Istio 及其组件。首先修改 `kube-apiserver.yaml` 配置服务账户参数,接着创建 `istio-system` 命名空间并添加 Istio 的 Helm 源。通过 Helm 安装 Istio Base 和 Discovery (istiod) Chart,并部署 Ingress Gateway 到 `istio-ingress` 命名空间。最后,创建一个 Nginx Deployment 和 Service,以及对应的 Istio Gateway 和 VirtualService 来验证安装是否成功.
|
5月前
|
Prometheus Kubernetes 网络协议
Istio 的配置分析
Istio 的配置分析
85 1
|
20天前
|
Kubernetes 数据可视化 微服务
掌握 Istio:部署完成后如何运用?
本文介绍了在Ubuntu 20.04单机环境下使用Istio服务网格的配置与测试过程。主要内容包括: 1. **环境准备**:使用一台IP为10.9.2.83的机器。 2. **Istio简介**:Istio简化了Kubernetes集群中的服务间通信、流量管理、安全性和可观测性。 3. **部署Bookinfo示例**: - 创建命名空间`istio-demo`并启用自动注入功能。 - 部署Bookinfo应用,包含四个微服务,并验证其正常运行。
26 0
|
5月前
|
Prometheus 网络协议 Cloud Native
Istio中的流量配置
Istio中的流量配置
88 1
|
Kubernetes 监控 Go
在Kubernetes上安装和配置Istio:逐步指南,展示如何在Kubernetes集群中安装和配置Istio服务网格
在Kubernetes上安装和配置Istio:逐步指南,展示如何在Kubernetes集群中安装和配置Istio服务网格
305 0
|
Kubernetes 负载均衡 网络协议
Kubernetes Ingress深入解析
基于不同的业务场景中,我们该如何在 Kubernetes 生态集群中规划我们应用程序接口的访问策略呢?
204 0
|
容器 Kubernetes 网络协议
在Istio上创建自定义的ingress-gateway
我们都知道,在istio中可以通过ingress gateway将服务暴露给外部使用,但是我们使用的ingress规则都是落在istio部署时默认创建的istio-ingressgateway上,如果我们希望创建自定义的ingressgateway该怎么操作呢,本文就带大家一步步操作,创建一个自定义的ingressgateway 环境准备 创建Kubernetes集群 阿里云容器服务Kubernetes 1.11.2目前已经上线,可以通过容器服务管理控制台非常方便地快速创建 Kubernetes 集群。
6025 0