使用 Ambassador 插件

概览

Ambassador 允许访问 minikube 内部运行的 Kubernetes 服务。Ambassador 可以通过 Ingress 资源和 Mapping 资源进行配置。

前提条件

  • Minikube 版本高于 v1.10.1
  • kubectl

配置 Ambassador

安装 Ambassador

Ambassador 可作为 Minikube 的一个 插件。通过运行以下命令安装:

minikube addons enable ambassador

这将在命名空间 ambassador 中安装 Ambassador。

通过 minikube tunnel 访问 Ambassador

服务 ambassador 的类型是 LoadBalancer。要访问此服务,请在单独的终端中运行一个 Minikube tunnel

minikube tunnel

现在,您可以通过分配给 ambassador 服务的外部 IP 访问 Ambassador。使用以下命令获取外部 IP:

kubectl get service ambassador -n ambassador
NAME         TYPE           CLUSTER-IP      EXTERNAL-IP     PORT(S)                      AGE
ambassador   LoadBalancer   10.104.86.124   10.104.86.124   80:31287/TCP,443:31934/TCP   77m

通过 Ingress 资源配置

在本教程中,我们将通过 Ingress 资源配置 Ambassador。要通过 IngressClass 资源进行配置,请阅读这篇 文章

首先,让我们创建一个 Kubernetes 部署和服务,我们将通过 Ambassador 与其通信。

kubectl create deployment hello-minikube --image=kicbase/echo-server:1.0
kubectl expose deployment hello-minikube --port=8080

此服务 hello-minikube 的类型是 ClusterIP,无法从集群外部访问。

现在,创建一个 Ingress 资源,在路径 /hello/ 暴露此服务。

注意: Ingress 资源必须具有注释 kubernetes.io/ingress.class: ambassador 才能被 Ambassador 识别。

hello-ingress.yaml

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  annotations:
    kubernetes.io/ingress.class: ambassador
  name: test-ingress
spec:
  rules:
  - http:
      paths:
      - path: /hello/
        backend:
          serviceName: hello-minikube
          servicePort: 8080

运行命令

kubectl apply -f hello-ingress.yaml

就是这样!现在您可以通过 Ambassador 访问您的服务了

curl http://<Ambassdor's External IP'/hello/>

注意: 有关 Ambassador 更高级的 Ingress 配置,例如 TLS 终止和基于名称的虚拟主机,请参阅 Ambassador 的 文档

通过 Mapping 资源配置

尽管 Ambassador 理解 Ingress 规范,但 Ingress 规范并未充分利用 Ambassador 的所有功能。Mapping 资源是 Ambassador 的核心资源,它将目标后端服务映射到给定的主机或前缀。

让我们创建另一个 Kubernetes 部署和服务,我们将通过 Ambassador 暴露它 -

kubectl create deployment mapping-minikube --image=kicbase/echo-server:1.0
kubectl expose deployment mapping-minikube --port=8080

此服务 mapping-minikube 的类型是 ClusterIP,无法从集群外部访问。

现在,让我们创建一个映射,通过 Ambassador 在路径 /hello-mapping/ 暴露此服务。

hello-mapping.yaml

apiVersion: getambassador.io/v2
kind:  Mapping
metadata:
  name:  mapping-minikube
spec:
  prefix: /hello-mapping/
  service: mapping-minikube.default:8080

运行命令

kubectl apply -f hello-mapping.yaml

就是这样!现在您可以通过 Ambassador 访问您的服务了

curl http://<Ambassdor's External IP'/hello-mapping/>

注意: 有关 Ambassador 映射的更多信息,请阅读其文档。


最后修改于 2023 年 7 月 7 日: 将插件 README 添加到网站 (cf976f6dd)