Artigo
· Out. 8 8min de leitura

eBPF - Cilium on FHIR® - Uma história Star Wars

 

Anakin Skywalker desafiou o alto terreno e foi terrivelmente ferido em Mustafar.  

 Ele é um funcionário relativamente novo do Império Galáctico, coberto por um Grande Plano de Grupo Planetário e agora tem um encontro ativo em andamento para serviços médicos emergentes na Grande Instalação Médica em Coruscant. O EMR implantado para o Sistema de Saúde Galáctico é alimentado pelo InterSystems FHIR Server rodando em Kubernetes protegido por Cilium.
 

Vamos recriar o cenário técnico, a ser executado no estilo de Isovalent Labs...

Kind Cluster

Vamos iniciar um cluster de 3 nós e desativar o CNI para que possamos substituí-lo pelo Cilium.

cat <<EOF | kind create cluster --config=-
kind: Cluster
apiVersion: kind.x-k8s.io/v1alpha4
nodes:
  - role: control-plane
  - role: worker
  - role: worker
  - role: worker
networking:
  disableDefaultCNI: true
EOF

Isso provisionará o cluster kind, 3 nós de largura com um único plano de controle.


Cilium

Cilium é um projeto de código aberto que fornece rede, segurança e observabilidade para ambientes conteinerizados como clusters Kubernetes. Ele usa uma tecnologia do kernel Linux chamada eBPF (extended Berkeley Packet Filter) para injetar lógicas de segurança, rede e observabilidade no kernel.

Em outras palavras, empunha a força.

cilium install --version v1.16.0
cilium status --wait


Hubble

Hubble é um traje de palhaço para Cilium, fornecendo visibilidade ridícula sobre quais poderes do Cilium estão em jogo em tempo real.

cilium enable hubble

 

 

Carga de trabalho InterSystems FHIR

InterSystems é o GOAT da interoperabilidade e transforma dados de saúde como um droide de protocolo.

kubectl apply -f https://raw.githubusercontent.com/sween/basenube/main/scenarios/ciliumfhir/deploy/cilium-fhir-starwars.yaml

A carga de trabalho resultante tem 4 implantações:

GrandMedicalFacility

Rede Integrada de Assistência Médica com sede em Coruscant, com instalações até o Bordo Exterior, utiliza o Epic e emprega o InterSystems I4H como um servidor FHIR.

MedicalDroid FX-6

Este droide de 1,83 metro de altura forneceu a Vader uma transfusão de sangue e treinou em procedimentos de pernas cibernéticas.

MedicalDroid DD-13

Também conhecido como DD-13 tripedal medical droid, este droide possui três pernas para estabilidade e foi projetado para instalar implantes cibernéticos.

MedicalDroid 2-1B

Os droides 2-1B possuem injetores hipodérmicos e pinças de servogrip fabricadas com precisão, e podem ser atualizados para se especializar em áreas como substituição de membros cibernéticos, neurocirurgia e biologia alienígena.

Como precisaremos disso de qualquer forma para as próximas entrevistas, vamos contar a história na verdadeira metodologia STAR (Situação, Tarefa, Ação, Resultado).

Sith-uation

Palpatine acompanhou o jedi caído para a instalação e, ao chegar, ajudou o registro a admiti-lo como Darth Vader.

cat > vader.json << 'EOF'
{
  "name": [
    {
      "use": "official",
      "family": "Vader",
      "given": [
        "Darth"
      ]
    }
  ],
  "gender": "male",
  "id": "DarthVader",
  "birthDate": "1977-05-25",
  "resourceType": "Patient"
}
EOF
curl -v -X PUT \
  -H "Content-Type: application/fhir+json" \
  -d @vader.json \
  "http://coruscanthealth:52773/intersystems/fhir/r5/Patient/DarthVader"

Darth Vader está agora registrado e pode ser visto em todo o sistema de saúde...

Pane de TI Galáctica

No entanto, tem um problema!

Pouco após o registro, ocorreu uma interrupção de TI galáctica, deixando o provedor de identidade do sistema de saúde indisponível. O servidor de recursos FHIR do InterSystems está habilitado para SMART, e o IDP está configurado, tornando o lançamento do EMR impossível na ausência do token JWT com os escopos aplicáveis para proteger as rotas..


[Nota do tradutor: segue tradução da imagem]

Palpatine: Tem um minuto?

Sween: Eu não estou de plantão, estou na casa dos 50, pelo amor dos Siths!

Palpatine: Todo mundo está me ignorando, e eu tenho um Jedi caído precisando desesperadamente de ajuda, e a equipe de cuidados está tendo problemas para acessar o Repositório FHIR do InterSystems devido a uma interrupção no provedor de identidade.

Sween: Você tem um JIRA para esse problema?

Palpatine: Não, mas eu posso atirar raios das minhas mãos.

Sween: Relaxa boomer, eu vou dar uma olhada.

 

Com certeza, temos um problema... a equipe de cuidados não consegue acessar o prontuário do paciente, só recebem códigos 401 e 403, e não estamos falando sobre seu Plano de Aposentadoria Galáctico.

Embora a interface do Hubble só forneça uma pista do que está acontecendo, inspecionar os fluxos do Hubble com informações da Camada 7 revela a situação.




...e após adicionar alguns debugs bunny ao endpoint FHIR do InterSystems, confirma isso.

 
FHIR Debug
zw^FSLOG
...
^FSLOG(379555)="DispatchRequest^HS.FHIRServer.Service^944|Msg|Dispatch interaction read for Patient/DarthVader|09/19/2024 10:48:20.833339AM"
^FSLOG(379556)="DispatchRequest^HS.FHIRServer.Service^944|Msg|Request Completed in .000186 secs: Patient/DarthVader|09/19/2024 10:48:20.833450AM"
^FSLOG(379557)="processRequest^HS.FHIRServer.RestHandler^944|Msg|Response Status: 401, Json: Patient|09/19/2024 10:48:20.833454AM"
...


Tarefa

What's a great line from Star Wars that doesn't get quoted enough? :  r/StarWarsCantina

[Nota do tradutor: tradução da imagem abaixo]

"Algumas vezes devemos deixar de lado o orgulho e fazer o que nos é requisitado." - Anakin Skywalker em Ataque dos Clones

Ação

Como a aplicação da política de rotas do SMART não é aplicável, vamos fazer do nosso jeito e usar o Cilium para proteger os endpoints enquanto Vader recebe a atenção imediata que o Imperador exige. Vamos agir como os Rebeldes aqui no cluster e transferir a proteção de endpoint/rota para o Cilium enquanto a Galáxia se recupera da interrupção.

Vamos implementar uma política de 'negar tudo' de qualquer lugar, usando uma CiliumClusterwideNetworkPolicy, e trabalhar de trás para frente no estilo de 'confiança zero'.

cat <<EOF | kubectl apply -n galactic-fhir -f- 
apiVersion: cilium.io/v2
kind: CiliumClusterwideNetworkPolicy
metadata:
  name: "denyall-coruscanthealth"
spec:
  description: "Block all the traffic (except DNS) by default"
  egress:
  - toEndpoints:
    - matchLabels:
        io.kubernetes.pod.namespace: kube-system
        k8s-app: kube-dns
    toPorts:
    - ports:
      - port: '53'
        protocol: UDP
      rules:
        dns:
        - matchPattern: '*'
  endpointSelector:
    matchExpressions:
    - key: io.kubernetes.pod.namespace
      operator: NotIn
      values:
      - kube-system
EOF

Está ótimo, Cilium lançando como se fosse quente!

Agora, vamos abrir o endpoint FHIR no pod do InterSystems, desativando o cliente oauth2.

set app = "/intersystems/fhir/r5"
Set strategy = ##class(HS.FHIRServer.API.InteractionsStrategy).GetStrategyForEndpoint(app)
// 7 = Mass Openness
Set configData.DebugMode = 7
Set configData = strategy.GetServiceConfigData()
Do strategy.SaveServiceConfigData(configData)

Por último, vamos criar uma CiliumNetworkPolicy para permitir que qualquer pessoa da organização:império acesse a rota para o registro de Darth Vader no namespace galactic-fhir.

apiVersion: "cilium.io/v2"
kind: CiliumNetworkPolicy
metadata:
  name: "l7-visibility"
spec:
  endpointSelector:
    matchLabels:
      org: empire
  egress:
  - toPorts:
    - ports:
      - port: "53"
        protocol: ANY
      rules:
        dns:
        - matchPattern: "*"
  - toEndpoints:
    - matchLabels:
        "k8s:io.kubernetes.pod.namespace": galactic-fhir
    toPorts:
    - ports:
      - port: "52773"
        protocol: TCP
      rules:
        http:
          - method: "GET"
            path: "/intersystems/fhir/r5/Patient/DarthVader"
          - method: "HEAD"
            path: "/intersystems/fhir/r5/Patient/DarthVader"
EOF

Parece que podemos voltar ao iRacing, acho que estamos bem.



...exceto

 [Nota do tradutor: tradução da imagem abaixo]

Palpatine: Desculpe te acordar, parece que temos outro problema.

Sween: Por que a liderança sempre diz isso para apoiar as pessoas e assume que todos apenas trabalham e dormem?

Palpatine: Desculpe, achei que o pessoal da geração X não ligasse para nada e só dormisse o tempo todo.

Sween: justo

Palpatine: Então, os droids médicos estão dizendo que o Vader precisa de pernas, mas o plano de saúde precisa aprovar, mas não consegue acessar o registro para pré autorizar o procedimento.

Sween: surreal

Palpatine: Eu sei, não é? Eu tenho o maior de todos os planos de grupo largos em toda a galáxia e ainda tenho que navegar o sistema de saúde galáctico assim.

Sim, parece que o pagador está sendo descartado...

Veredicto da política = REJEITADO



Vamos adicionar outra política, permitindo que a organização:pagador acesse a rota de Vader:

cat <<EOF | kubectl apply -n galactic-fhir -f- 
apiVersion: "cilium.io/v2"
kind: CiliumNetworkPolicy
metadata:
  name: "l7-visibility-payer"
spec:
  endpointSelector:
    matchLabels:
      org: payer
  egress:
  - toPorts:
    - ports:
      - port: "53"
        protocol: ANY
      rules:
        dns:
        - matchPattern: "*"
  - toEndpoints:
    - matchLabels:
        "k8s:io.kubernetes.pod.namespace": galactic-fhir
    toPorts:
    - ports:
      - port: "52773"
        protocol: TCP
      rules:
        http:
          - method: "GET"
            path: "/intersystems/fhir/r5/Patient/DarthVader"
          - method: "HEAD"
            path: "/intersystems/fhir/r5/Patient/DarthVader"
EOF

Bem, isso não foi suficiente, e podemos ver por quê.


 [Nota do tradutor: tradução da imagem abaixo]

Sween: Quem é Anakin?

Palpatine: Ah, o Anakin agora é Darth Vader

Sween: Desde quando?

Palpatine: Era Anakin, então virou Vader

Sween: Quando o "então virou" será agora?

Então ligamos para o pagador e pedimos que eles acessassem o registro do paciente "correto", e Anakin Skywalker recebe suas pernas.

Hora de desabafar...

[Nota do tradutor: tradução da imagem abaixo]

Sween: Você sabe que eles têm um problema sério de identidade Galáctica naquele sistema de saúde.

Sween: Me parece que o EMR que registrou o Darth fez um POST com um conjunto de nomes.


Resultado

[Nota do tradutor: tradução da imagem abaixo]

Está funcionando! Está funcionando!!!

Discussão (0)1
Entre ou crie uma conta para continuar