# HIE Migration to AKS
---
## Goals
- [ ] migrage HIE infrastructure for FMC from ACI to AKS
- [ ] integrate new infrastructure with current CI/CD process
- [ ] work estimation and delivery date
- [ ] involve other relevant parties at required capacity
- [ ] prepare presentation with plan to solve the problem
---
## Implementation Phases
1. Create AKS cluster with IaC
2. Installation of additonal tools
3. Cluster configuration and hardening
4. Parallel
- create K8s manifest files for existing services
- update pipelines to deploy to AKS instead of ACI
5. Define and implement operations processes and procedures
---
## Infrastructure as Code
- use terraform cloud
- create k8s manifest files for existing components, consider resource limits
- integrate with existing VNETs from DTI, NetCare, PH (one tunner for prod, one for non-prod)
- check if is's possible to use correct peering method with existing VNETs
- preference would be to use HUB&Spoke architecture
----
### Guidelines
- use [AKS Base cluster guidelines](https://docs.microsoft.com/en-us/azure/architecture/reference-architectures/containers/aks/secure-baseline-aks#deploy-ingress-resources)
- [base repo to use as started pack](https://dev.azure.com/GRD-EMEA/Cloud%20Native%20Platform/_git/iac-aks-exp)
----
#### AKS setup
- AKS as terraform module
- networking
- identity management
- security
- compute
- after cluster is up wa want to install and configure additional components
- use [Atrifact Hub](https://artifacthub.io/packages/search?page=1) to deploy well known components
----
#### Modules
```plantuml
skinparam LineType ortho
rectangle "AKS" as aks {
component "Networking Module" as net
component "AAD Module" as aad
}
actor "DevOps" as devops
devops --> aks : build
```
---
## Performance
- define performance metrics for HIE
- include performance capabilities in pod manifests
---
### Traffic
---
#### Ingress
- from outside to FHIR server (HTTPS)
- terminated on gateway
- another service @Oldrich to cofirm
- use load balancer instead of ingress controller
---
#### Egress
- DTI MS SQL server via VPN (TCP)
- push results to server 2 also DTI (TCP)
---
#### Workloads Networking
- HTTP, HTTPS terminated on load balancer
- pods need to use KeyValut for configuration and secrets management
- pods communicate with ActiveMQ server runing on VM
---
## CI/CD Applciations Pipelines
- make sure that services follow 12 factro app model
- create k8s manifest files for existing components, consider resource limits
- HIE uses ActiveMQ, for first pass we will not move it to AKS
- HIE containers are stateless
- images are already stored in ACR per env (dev, qa, val, prod)
- use `kubeclt` in pipeline
---
## Roles and Access
- use Azure RBAC integrated with K8s roles to manage access to cluster
- access to cluser via roles/etc
---
## Security
- enable [Azure Defender for AKS](https://docs.microsoft.com/en-us/azure/security-center/defender-for-kubernetes-introduction)
- use [Security Center](https://docs.microsoft.com/en-us/azure/security-center/security-center-introduction) for security monitoring
- use service accounts mapped to K8s service accounts to manage access for workloads
- use [App pod identity](https://github.com/Azure/aad-pod-identity), *this might not be needed*
- ask about OPA Gatekeeper/Azure Policies implementaiotn for OPA
---
## Scalability
- HPA enough for now
- cluser autscaler is needed for now
---
## Observability
- use Azure native tools (Azure Monitor)
- need to involve L2 support and other to define observability requirements
----
### Logging
- enable VM logging
- log analytics workspace
----
### Distributed Tracing
- enable VM tracing
- no need for distributed tracking for workloads
----
### Monitoring
- use Azure native tools (Azure Monitor)
---
## Disaster Recovery
- abiltiy to recreate cluster
- could check Valero (cluter snapshotter)
---
## Cost Management
- vm level cost management from Azure
- check out [Kubecost](https://github.com/kubecost)
- use spot instances for DEV
- use reserved instances for PROD
---
## Operations
- GitOPS maybe, probably not
- need to involve L2 support and other to define operations requirements
---
### Questions?
{"metaMigratedAt":"2023-06-15T19:46:02.717Z","metaMigratedFrom":"Content","title":"HIE Migration to AKS","breaks":false,"contributors":"[{\"id\":\"34fa81d7-1eec-4884-95a8-cda77edbe1a9\",\"add\":5666,\"del\":1358}]"}