Skip to content

Commit 0b69d79

Browse files
committed
language in article byline
1 parent 59b5e2e commit 0b69d79

File tree

20 files changed

+260
-206
lines changed

20 files changed

+260
-206
lines changed

src/routes/(pages)/blog/+page.server.ts

+1
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ export async function load() {
77
author: string;
88
description: string;
99
draft?: boolean;
10+
language?: string;
1011
};
1112
}>("./posts/*/+page.md", { eager: true });
1213

src/routes/(pages)/blog/+page.svelte

+4-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
<script lang="ts">
22
import { format } from "date-fns";
33
import type { PageData } from "./$types";
4+
import { nb } from "date-fns/locale";
45
56
let { data }: { data: PageData } = $props();
67
</script>
@@ -14,7 +15,9 @@
1415
</a>
1516
</h2>
1617
<div class="byline">
17-
{format(post.metadata.date, "MMMM d, yyyy")} by {post.metadata.author}
18+
{post.metadata.language === "en"
19+
? `${format(post.metadata.date, "MMMM d, yyyy")} by ${post.metadata.author}`
20+
: `${format(post.metadata.date, "d. MMMM yyyy", { locale: nb })} av ${post.metadata.author}`}
1821
</div>
1922
<div class="description">{post.metadata.description}</div>
2023
</li>

src/routes/(pages)/blog/posts/adventskalender-2024/+page.md

+1
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ date: 2024-12-01T22:10:00+02:00
55
author: Naissen
66
tags: []
77
theme: advent
8+
language: nb
89
---
910

1011
La oss gjøre adventstiden mer nais med en Nais adventskalender! Her vil vi hver arbeidsdag legge ut et tips til hvordan du kan bruke Nais-plattformen.

src/routes/(pages)/blog/posts/changing-service-mesh/+page.md

+17-6
Original file line numberDiff line numberDiff line change
@@ -5,9 +5,11 @@ date: 2021-05-04T20:37:13+02:00
55
draft: false
66
author: Frode Sundby
77
tags: [istio, linkerd, LoadBalancing]
8+
language: en
89
---
910

1011
## Why change?
12+
1113
With an ambition of making our environments as secure as possible, we jumped on the service-mesh bandwagon in 2018 with Istio 0.7 and have stuck with it since.
1214

1315
Istio is a large and feature rich system that brings capabilities aplenty.
@@ -27,7 +29,9 @@ Rarely has a meme depicted a feeling more strongly
2729
Even though we'd invested a lot of time and built in quite a bit of Istio into our platform, we knew we had to make the change.
2830

2931
## How did we do it?
30-
### Original architecture:
32+
33+
### Original architecture:
34+
3135
Let's first have a quick look at what we were dealing with:
3236

3337
The first thing an end user encountered was our Google LoadBalancer configured by an IstioOperator.
@@ -38,20 +42,22 @@ We used an [operator](https://github.com/nais/naiserator) to configure these pol
3842
![changing-service-mesh-1](./images/changing-service-mesh-1.png)
3943

4044
### New LoadBalancers and ingress controllers
45+
4146
Since our LoadBalancers were configured by (and sent traffic to) Istio, we had to change the way we configured them.
4247
Separating LoadBalancing from mesh is a healthy separation of concern that will give us greater flexibility in the future as well.
4348
We also had to swap out Istio Ingressgateway with an Ingress Controller - we opted for NGINX.
4449

4550
We started by creating IP-addresses and Cloud Armor security policies for our new LoadBalancers with [Terraform](https://www.terraform.io/).
4651

4752
The loadbalancers themselves were created by an Ingress object:
53+
4854
```yaml
4955
apiVersion: networking.k8s.io/v1beta1
5056
kind: Ingress
5157
metadata:
5258
annotations:
5359
networking.gke.io/v1beta1.FrontendConfig: <tls-config>
54-
kubernetes.io/ingress.global-static-ip-name: <global-ip-name>
60+
kubernetes.io/ingress.global-static-ip-name: <global-ip-name>
5561
kubernetes.io/ingress.allow-http: "false"
5662
name: <loadbalancer-name>
5763
namespace: <ingress-controller-namespace>
@@ -64,6 +70,7 @@ spec:
6470
```
6571
6672
We tied the Cloud Armor security policy to the Loadbalancer with a `BackendConfig` on the Ingress Controller's service:
73+
6774
```yaml
6875
apiVersion: v1
6976
kind: Service
@@ -89,6 +96,7 @@ Alrighty. We'd now gotten ourselves a brand new set of independantly configured
8996

9097
However - if we'd started shipping traffic to the new components at this stage, things would start breaking as there were no ingresses in the cluster - only VirtualServices.
9198
To avoid downtime, we created an interim ingress that forwarded all traffic to the Istio IngressGateway:
99+
92100
```yaml
93101
apiVersion: networking.k8s.io/v1beta1
94102
kind: Ingress
@@ -103,15 +111,18 @@ spec:
103111
path: /
104112
...
105113
```
114+
106115
![changing-service-mesh-3](./images/changing-service-mesh-3.png)
107116
With this ingress in place, we could reach all the existing VirtualServices exposed by the Istio Ingressgateway via the new Loadbalancers and Nginx.
108117
And we could point our DNS records to the new rig without anyone noticing a thing.
109118

110119
### Migrating workloads from Istio to Linkerd
111-
Once LoadBalancing and ingress traffic were closed chapters, we changed our attention to migrating workloads from Istio to Linkerd.
120+
121+
Once LoadBalancing and ingress traffic were closed chapters, we changed our attention to migrating workloads from Istio to Linkerd.
112122
When moving a workload to a new service-mesh, there's a bit more to it than swapping out the sidecar with a new namespace annotation.
113123
Our primary concerns were:
114-
- The new sidecar would require NetworkPolicies to allow traffic to and from linkerd.
124+
125+
- The new sidecar would require NetworkPolicies to allow traffic to and from linkerd.
115126
- The application's VirtualService would have to be transformed into an Ingress.
116127
- Applications that used [scuttle](https://github.com/redboxllc/scuttle) to wait for the Istio sidecar to be ready had to be disabled.
117128
- We couldn't possibly migrate all workloads simultaneously due to scale.
@@ -122,7 +133,7 @@ Using the NetworkPolicies to map out who were communicating with whom, we found
122133

123134
We then gave this list to our [operator](https://github.com/nais/naiserator), who in turn removed Istio resources, updated NetworkPolicies, created Ingresses and restarted workloads.
124135
Slowly but surely our linkerd dashboard was starting to populate, and the only downtime was during the seconds it took for the first Linkerd pod to be ready.
125-
One thing we didn't take into concideration (but should have), was that some applications shared a hostname.
136+
One thing we didn't take into concideration (but should have), was that some applications shared a hostname.
126137
When an ingress was created for a shared hostname, Nginx would stop forwarding requests for these hosts to Istio Ingressgateway, resulting in non-migrated applications not getting any traffic.
127138
Realizing this, we started migrating applications on the same hostname simultaneously too.
128139

@@ -133,8 +144,8 @@ And then they all lived happily ever after...
133144
Except that we had to clean up Istio's mess.
134145

135146
### Cleaning up
136-
What was left after the party was a fully operational Istio control plane, a whole bunch of Istio CRD's and a completely unused set of LoadBalancers. In addition we had to clean up everything related to Istio in a whole lot of pipelines and components
137147

148+
What was left after the party was a fully operational Istio control plane, a whole bunch of Istio CRD's and a completely unused set of LoadBalancers. In addition we had to clean up everything related to Istio in a whole lot of pipelines and components
138149

139150
![changing-service-mesh-5](./images/changing-service-mesh-5.png)
140151
![changing-service-mesh-6](./images/changing-service-mesh-6.png)

src/routes/(pages)/blog/posts/data_mesh_governance/+page.md

+33-20
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,9 @@ date: 2022-05-11T09:27:57+02:00
55
draft: false
66
author: Louis Dieffenthaler
77
tags: []
8+
language: en
89
---
10+
911
Using data to develop the world`s best welfare system is a bold mission we at the Norwegian Welfare and Labour Administration (NAV) have.
1012
Being able to estimate the impact of measures on youth unemployment to avoid social exclusion.
1113
Gaining more insight on how we can adjust our communication to different user groups so that we are more certain that the citizens get their benefits.
@@ -19,17 +21,20 @@ Enabling the teams to explore problems without being tied to a specified output
1921
Our ambition is to enable the teams to treat data in the same manner: as a product.
2022

2123
## The case for data governance
24+
2225
The shift from building data pipelines answering specific questions to sharing data as products that can solve a variety of problems not yet known is massive.
2326
To make this leap, we look to the [data mesh-approach](https://martinfowler.com/articles/data-mesh-principles.html) described by Zhamakh Deghani.
2427
The principle of shifting ownership upstream to domain teams supported by a platform reducing the cognitive burden resonates with how we do it on the operational side.
2528
We firmly believe that the product teams are best positioned to produce data that meets the consumers` needs related to for instance business definitions and quality.
2629
On the other side, we acknowledge that there are justifications for collaborating with other teams on reaching decisions.
2730
A few of those are:
28-
- The need for coordination between teams. For instance, related to a common standard for communicating data quality
29-
- The need to make sure the teams´ internal decisions do not conflict with the “greater good” of NAV. Policies could for instance be applied to a data product with multiple critical dependencies downstream
30-
- The need to define policies related to compliance. GDPR is the prime example
31+
32+
- The need for coordination between teams. For instance, related to a common standard for communicating data quality
33+
- The need to make sure the teams´ internal decisions do not conflict with the “greater good” of NAV. Policies could for instance be applied to a data product with multiple critical dependencies downstream
34+
- The need to define policies related to compliance. GDPR is the prime example
3135

3236
## Governance should not only control but enable.
37+
3338
The word “governance” does not make people jump out of bed in the morning.
3439
Traditionally, governance has been focused more on making sure people don`t do stuff they should not do.
3540
Furthermore, data management – the management of business logic, access controls, etc. – has typically been the responsibility of a centralized team.
@@ -41,21 +46,24 @@ At the same time, the usage of data needs to adhere to the organization`s polici
4146
In other words, data governance should enable teams to a) produce data matching the analytical needs of NAV and b) stay compliant.
4247

4348
## Principles and representation
49+
4450
The data mesh-paradigm describes a federated model of data governance.
4551
The actors on the platform need to collaborate on developing policies that provide value and are feasible.
4652
The data producers are supported by the data platform in performing the data management.
4753
At NAV, we have approached this by setting up a “ground rules forum”.
4854
The principles underlying the group`s work are:
49-
1. The responsibility of producing data as a product should be placed as close to the origin as possible
50-
2. Policies that move responsibility away from the data producers should be justified by value either in the form of analytical use or compliance
51-
3. The policies should be supported by the platform when this is feasible
55+
56+
1. The responsibility of producing data as a product should be placed as close to the origin as possible
57+
2. Policies that move responsibility away from the data producers should be justified by value either in the form of analytical use or compliance
58+
3. The policies should be supported by the platform when this is feasible
5259

5360
The forum consists of team members with different perspectives:
54-
- Consumer: The value from an analytical perspective
55-
- Producer: The value from a producer`s perspective in addition to the cost of implementing policies
56-
- Platform: The knowledge of how the policies can be supported by the platform
57-
- Legal: The value in terms of compliance
58-
- Business owner: The overall business value
61+
62+
- Consumer: The value from an analytical perspective
63+
- Producer: The value from a producer`s perspective in addition to the cost of implementing policies
64+
- Platform: The knowledge of how the policies can be supported by the platform
65+
- Legal: The value in terms of compliance
66+
- Business owner: The overall business value
5967

6068
In a complex organization with close to 100 product teams, it is important to scope down the complexity.
6169
Luckily for us, NAV is currently replacing legacy systems.
@@ -65,29 +73,34 @@ The plan is to calibrate the organization and processes before scaling out to ot
6573
At the same time, we are also seeking input from other parts of the organization when forming policies.
6674

6775
## Governance affects everyone – and should include everyone!
76+
6877
Broad involvement of the people sharing and using data is crucial for at least two reasons:
6978
It increases both the chance of forming better policies and the legitimacy of these policies.
7079
The process we have set up from start is deliberately simple:
71-
1. People on the platform use Slack to discuss problems governance policies might solve
72-
2. The forum discusses suggested policies when enough input has piled up. The suggested policies are documented using an architectural decision record
73-
3. People on the platform share their opinions on the suggested policies
74-
4. Decisions are reached
75-
5. The policy is implemented, preferably supported by the platform.
80+
81+
1. People on the platform use Slack to discuss problems governance policies might solve
82+
2. The forum discusses suggested policies when enough input has piled up. The suggested policies are documented using an architectural decision record
83+
3. People on the platform share their opinions on the suggested policies
84+
4. Decisions are reached
85+
5. The policy is implemented, preferably supported by the platform.
7686

7787
Instead of engineering a complex process upfront, we start out with this and will calibrate it to fit our needs.
7888

7989
## How technology supports process
90+
8091
We are currently working on a feature that illustrates how the implementation of policy can be supported by technology.
8192
To protect privacy, we have a policy that states that the consumer of data needs to document the legal basis for using the data.
8293
On our marketplace – where the producers share data the consumers can find and understand – we are now working on a feature where the consumers can fill out a form to request access.
8394
This feature is integrated with the databases where the legal basis is documented, easing the process for the consumer.
8495
The request is sent to the data product owner`s site on the marketplace, where they can grant/reject access.
8596
The policy was already there, but by adding the platform to the mix, we:
86-
- Eased the process for the consumer and the producer as the requests are now part of their workflow – not a Jira ticket completely on the side of everything
87-
- Eased the evaluation of assessments done by the consumers since we are logging it
88-
- Allowed for product thinking of this process. We can now set up metrics to see how long it takes for requests to be processed, the share of requests being rejected, etc. In turn, this can be used as input into the next iteration of the platform. This also covers the non-technical sides of the process: How can we change the policies to reduce frictions?
97+
98+
- Eased the process for the consumer and the producer as the requests are now part of their workflow – not a Jira ticket completely on the side of everything
99+
- Eased the evaluation of assessments done by the consumers since we are logging it
100+
- Allowed for product thinking of this process. We can now set up metrics to see how long it takes for requests to be processed, the share of requests being rejected, etc. In turn, this can be used as input into the next iteration of the platform. This also covers the non-technical sides of the process: How can we change the policies to reduce frictions?
89101

90102
## Summing up
103+
91104
Governance is key to unlocking the value of data in a secure way.
92105
To achieve this, we need to approach this by supporting teams instead of controlling them.
93-
The approach we describe here is intentionally lightweight, and we will share our learning points as we progress.
106+
The approach we describe here is intentionally lightweight, and we will share our learning points as we progress.

0 commit comments

Comments
 (0)