# Kubernetes - Linkerd
[Linkerd](https://linkerd.io) es un servicio de malla para _Kubernetes_. _Linkerd_ hace que la ejecución de servicios sea más fácil y segura al brindarle depuración, observabilidad, confiabilidad y seguridad en tiempo de ejecución.
## Instalación
Para poder instalar _Linkerd_ en nuestro _Cluster_, primero debemos instalar _Linkerd CLI_, con el siguiente comando:
```
curl -fsL https://run.linkerd.io/install | sh
```
En caso de que cuentes con _MacOS_ puedes instalarlo mediante [Brew](https://brew.sh/index_es), con el siguiente comando: `brew install linkerd`
Una vez que hayas instalado _Linkerd CLI_, deberás corroborar la instalación con el comando:
```
linkerd version
```
Antes de continuar con la instalación, debemos asegurarnos de que todo se ha configurado correctamente y podemos instalar el _Control Plane_, para ello ejecuta:
```
linkerd check --pre
```
En caso de que se _Linkerd_ haya verificado que puedes continuar con la instalación, ahora instalaremos el _Control Plane_ mediante _Helm_.
Para poder instalar el _Control Plane_ con _Helm_, primero deberás generar algunos certificados con la ayuda de [Step](https://smallstep.com/cli/), por lo que, previamente deberás instalar [Step](https://smallstep.com/docs/step-ca/installation/#kubernetes).
Una vez que hayas instalado _Step_, deberás generar dos certificados (Trust anchor certificate y Issuer Certificate), para ello ejecuta los siguientes comandos:
```
step certificate create root.linkerd.cluster.local ca.crt ca.key \
--profile root-ca --no-password --insecure
```
```
step certificate create identity.linkerd.cluster.local issuer.crt issuer.key \
--profile intermediate-ca --not-after 8760h --no-password --insecure \
--ca ca.crt --ca-key ca.key
```
Una vez que hayas generado los certificados, deberás agregar el repositorio de _Linkerd_ a _Helm_ con el siguiente comando:
```
helm repo add linkerd https://helm.linkerd.io/stable
```
Posteriormente, instalaremos _Linkerd_ con la ayuda de _Helm_:
```
exp=$(date -v+8760H +"%Y-%m-%dT%H:%M:%SZ")
helm install linkerd2 \
--set-file identityTrustAnchorsPEM=ca.crt \
--set-file identity.issuer.tls.crtPEM=issuer.crt \
--set-file identity.issuer.tls.keyPEM=issuer.key \
--set identity.issuer.crtExpiry=$exp \
linkerd/linkerd2
```
Una vez que hayas instalado _Linkerd_, puedes verificar la instalación con el siguiente comando:
```
linkerd check
```
## Añadir extensión de Viz para métricas
_Viz_ es una extensión de _Linkerd_ que nos proveera de un _Dashboard_ en el cuál podremos observar métricas acerca de nuestro _Cluster_.
Para ello, ejecuta el siguiente comando:
```
linkerd viz install | kubectl apply -f -
```
Puedes verificar la instalación con el comando:
```
linkerd check
```
Una vez que hayas instalado _Viz_, podrás ejecutarlo localmente con el comando:
```
linkerd viz dashboard &
```
## Aplicar _Mesh_ a un namespace
Hasta el momento, hemos instalado _Linkerd_, sin embargo, no hemos aplicado un servicio de malla, para ello, debemos ejecutar un comando para que nuestro deployment se actualice y realice la malla.
```
kubectl -n <NAMESPACE> get deploy -o yaml | linkerd inject - | kubectl apply -f -
```
Con esto, los deployments del namespace se actualizarán y agregarán el servicio de malla.
Sin embargo, deberás reiniciar el deployment para que se aplique la malla, para ello, ejecuta el siguiente comando:
```
kubectl -n <NAMESPACE> rollout restart <DEPLOYMENT-NAME>
```
Una vez que se reinicie el deployment, el servicio de malla estará listo.