Uso de OpenFaaS en Azure Kubernetes Service (AKS)
OpenFaaS es un marco que usa contenedores para compilar funciones sin servidor. Como proyecto de código abierto, se ha adoptado a gran escala dentro de la comunidad. En este documento se detalla la instalación y uso de OpenFaas en un clúster de Azure Kubernetes Service (AKS).
Antes de empezar
- En este artículo se presupone un conocimiento básico de los conceptos de Kubernetes. Para más información, consulte Conceptos básicos de Kubernetes de Azure Kubernetes Service (AKS).
- Necesita una suscripción de Azure activa. Si no tiene una, cree una cuenta gratuita antes de empezar.
- Necesita un clúster de AKS. Si no dispone de un clúster existente, puede crear uno mediante la CLI de Azure, Azure PowerShell o Azure Portal.
- Debe instalar la CLI de OpenFaaS. Para ver las opciones de instalación, consulte la documentación de la CLI de OpenFaaS.
Incorporación del repositorio de gráficos de Helm de OpenFaaS
Navegue a Azure Cloud Shell.
Agregue el repositorio de gráficos de Helm de OpenFaaS y actualice a la versión más reciente mediante los siguientes comandos
helm
.helm repo add openfaas https://openfaas.github.io/faas-netes/ helm repo update
Implementación de OpenFaaS
Como recomendación, OpenFaaS y sus funciones deberían almacenarse en su propio espacio de nombres de Kubernetes.
Cree un espacio de nombres para el sistema y las funciones de OpenFaaS mediante el comando
kubectl apply
.kubectl apply -f https://raw.githubusercontent.com/openfaas/faas-netes/master/namespaces.yml
Genere una contraseña para el portal de la interfaz de usuario de OpenFaaS y la API de REST mediante los siguientes comandos. El gráfico de Helm usa esta contraseña para habilitar la autenticación básica en la puerta de enlace de OpenFaaS, que se expone en Internet mediante un equilibrador de carga de nube.
# generate a random password PASSWORD=$(head -c 12 /dev/urandom | shasum| cut -d' ' -f1) kubectl -n openfaas create secret generic basic-auth \ --from-literal=basic-auth-user=admin \ --from-literal=basic-auth-password="$PASSWORD"
Importante
El uso de un nombre de usuario y una contraseña para la autenticación es un patrón no seguro. Si tiene una licencia empresarial de OpenFaaS, se recomienda usar Administración de identidad y acceso (IAM)(IAM) para OpenFaaS en su lugar.
Obtenga el valor de la contraseña mediante el siguiente comando
echo
.echo $PASSWORD
Implemente OpenFaaS en el clúster de AKS mediante el comando
helm upgrade
.helm upgrade openfaas --install openfaas/openfaas \ --namespace openfaas \ --set basic_auth=true \ --set functionNamespace=openfaas-fn \ --set serviceType=LoadBalancer
El resultado debería ser similar al siguiente ejemplo reducido:
NAME: openfaas LAST DEPLOYED: Tue Aug 29 08:26:11 2023 NAMESPACE: openfaas STATUS: deployed ... NOTES: To verify that openfaas has started, run: kubectl --namespace=openfaas get deployments -l "release=openfaas, app=openfaas" ...
Se crea una dirección IP pública para tener acceso a la puerta de enlace de OpenFaaS. Obtenga la dirección IP mediante el comando
kubectl get service
.kubectl get service -l component=gateway --namespace openfaas
El resultado debería ser similar al ejemplo siguiente:
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE gateway ClusterIP 10.0.156.194 <none> 8080/TCP 7m gateway-external LoadBalancer 10.0.28.18 52.186.64.52 8080:30800/TCP 7m
Pruebe el sistema OpenFaaS; para ello, vaya a la dirección IP externa en el puerto 8080, en este ejemplo
http://52.186.64.52:8080
, donde se le pedirá que inicie sesión. El usuario predeterminado esadmin
y la contraseña se puede recuperar conecho $PASSWORD
.Establezca
$OPENFAAS_URL
en la dirección URL de la dirección IP externa en el puerto 8080 e inicie sesión con la CLI de Azure mediante los siguientes comandos.export OPENFAAS_URL=http://52.186.64.52:8080 echo -n $PASSWORD | ./faas-cli login -g $OPENFAAS_URL -u admin --password-stdin
Creación de la primera función
Vaya al sistema OpenFaaS mediante la dirección URL de OpenFaaS.
Cree una función mediante el portal de OpenFaas; para ello, seleccione Implementar una nueva función y busque Figlet.
Seleccione la función Figlet y haga clic en Implementar.
Invoque la función mediante el siguiente comando
curl
. Asegúrese de reemplazar la dirección IP en el ejemplo siguiente por la dirección de puerta de enlace de OpenFaaS.curl -X POST http://52.186.64.52:8080/function/figlet -d "Hello Azure"
El resultado debería ser similar al ejemplo siguiente:
_ _ _ _ _ | | | | ___| | | ___ / \ _____ _ _ __ ___ | |_| |/ _ \ | |/ _ \ / _ \ |_ / | | | '__/ _ \ | _ | __/ | | (_) | / ___ \ / /| |_| | | | __/ |_| |_|\___|_|_|\___/ /_/ \_\/___|\__,_|_| \___|
Creación de la segunda función
Configuración de la instancia de Azure Cosmos DB
Navegue a Azure Cloud Shell.
Cree un nuevo grupo de recursos para la instancia de Azure Cosmos DB mediante el comando
az group create
.az group create --name serverless-backing --location eastus
Implemente una instancia de Azure Cosmos DB de tipo
MongoDB
mediante el comandoaz cosmosdb create
. Reemplaceopenfaas-cosmos
por su propio nombre de instancia único.az cosmosdb create --resource-group serverless-backing --name openfaas-cosmos --kind MongoDB
Obtenga la cadena de conexión de base de datos de Azure Cosmos DB y almacénela en una variable mediante el comando
az cosmosdb keys list
. Asegúrese de reemplazar el valor del argumento--resource-group
con el nombre del grupo de recursos y el argumento--name
con el nombre de su instancia de Azure Cosmos DB.COSMOS=$(az cosmosdb keys list \ --type connection-strings \ --resource-group serverless-backing \ --name openfaas-cosmos \ --output tsv)
Rellene Azure Cosmos DB con datos de prueba mediante la creación de un archivo denominado
plans.json
y la copia en el siguiente archivo JSON.{ "name" : "two_person", "friendlyName" : "Two Person Plan", "portionSize" : "1-2 Person", "mealsPerWeek" : "3 Unique meals per week", "price" : 72, "description" : "Our basic plan, delivering 3 meals per week, which will feed 1-2 people.", "__v" : 0 }
Creación de la función
Instale las herramientas de MongoDB. El siguiente comando de ejemplo instala estas herramientas mediante brew. Para ver más opciones de instalación, consulte la documentación de MongoDB.
brew install mongodb
Cargue la instancia de Azure Cosmos DB con datos mediante la herramienta mongoimport.
mongoimport --uri=$COSMOS -c plans < plans.json
El resultado debería ser similar al ejemplo siguiente:
2018-02-19T14:42:14.313+0000 connected to: localhost 2018-02-19T14:42:14.918+0000 imported 1 document
Cree la función mediante el comando
faas-cli deploy
. Asegúrese de actualizar el valor del argumento-g
con la dirección de la puerta de enlace de OpenFaaS.faas-cli deploy -g http://52.186.64.52:8080 --image=shanepeckham/openfaascosmos --name=cosmos-query --env=NODE_ENV=$COSMOS
Una vez implementada, el resultado debería ser similar a la siguiente salida de ejemplo:
Deployed. 202 Accepted. URL: http://52.186.64.52:8080/function/cosmos-query
Pruebe la función con el siguiente comando
curl
. Asegúrese de actualizar la dirección IP con la dirección de puerta de enlace de OpenFaaS.curl -s http://52.186.64.52:8080/function/cosmos-query
El resultado debería ser similar al ejemplo siguiente:
[{"ID":"","Name":"two_person","FriendlyName":"","PortionSize":"","MealsPerWeek":"","Price":72,"Description":"Our basic plan, delivering 3 meals per week, which will feed 1-2 people."}]
Nota:
También puede probar la función dentro de la UI de OpenFaaS:
Pasos siguientes
Si desea obtener más información, puede realizar el taller sobre OpenFaaS, que incluye un conjunto de laboratorios prácticos que abarcan temas como la creación de su propio bot de GitHub, el consumo de secretos, la visualización de métricas y el escalado automático.
Azure Kubernetes Service