Amazon VPC CNI now supports Kubernetes Network Policies | Amazon Web Services
Introduction Today, we’re excited to announce the native support for enforcing Kubernetes network policies with Amazon VPC Container Networking Interface (CNI) Plugin. You can now use Amazon VPC CNI to implement both pod networking and network policies to secure the traffic in your Kubernetes clusters. Native support for network policies has been one of the […]
How to use SHA-256 instead of SHA-1 as Git hashing algorithm
On 23 February, 2017 the SHAttered attack demonstrated a practical SHA-1 hash collision. While it does not directly affect Git, it's only a matter of time before attacks are found against it. The NIST has started recommending to STOP using SHA-1 back in 2006! With v2.42.0 Git has finally marked
Phylum routinely identifies malware and other software supply chain attacks targeting high-value, critical assets: an organization’s software developers. Most recently, we’ve reported on a flurry of sophisticated attacks targeting JavaScript developers, respawning malware on PyPI, and were the first to identify North Korean state actors publishing malicious packages
Blog: Gateway API v0.8.0: Introducing Service Mesh Support
Authors: Flynn (Buoyant), John Howard (Google), Keith Mattix (Microsoft), Michael Beaumont (Kong), Mike Morris (independent), Rob Scott (Google)
We are thrilled to announce the v0.8.0 release of Gateway API! With this
release, Gateway API support for service mesh has reached Experimental
status . We look forward to your feedback!
We're especially delighted to announce that Kuma 2.3+, Linkerd 2.14+, and Istio
1.16+ are all fully-conformant implementations of Gateway API service mesh
support.
Service mesh support in Gateway API
While the initial focus of Gateway API was always ingress (north-south)
traffic, it was clear almost from the beginning that the same basic routing
concepts should also be applicable to service mesh (east-west) traffic. In
2022, the Gateway API subproject started the GAMMA initiative , a
dedicated vendor-neutral workstream, specifically to examine how best to fit
service mesh support into the framework of the Gateway API resources, without
requiring users of Gateway API to relearn everything they understand about the
API.
Over the last year, GAMMA has dug deeply into the challenges and possible
solutions around using Gateway API for service mesh. The end result is a small
number of enhancement proposals that subsume many hours of thought and
debate, and provide a minimum viable path to allow Gateway API to be used for
service mesh.
How will mesh routing work when using Gateway API?
You can find all the details in the Gateway API Mesh routing
documentation and GEP-1426 , but the short version for Gateway
API v0.8.0 is that an HTTPRoute can now have a parentRef that is a Service,
rather than just a Gateway. We anticipate future GEPs in this area as we gain
more experience with service mesh use cases -- binding to a Service makes it
possible to use the Gateway API with a service mesh, but there are several
interesting use cases that remain difficult to cover.
As an example, you might use an HTTPRoute to do an A-B test in the mesh as
follows:
apiVersion : gateway.networking.k8s.io/v1beta1
kind : HTTPRoute
metadata :
name : bar-route
spec :
parentRefs :
- group : ""
kind : Service
name : demo-app
port : 5000
rules :
- matches :
- headers :
- type : Exact
name : env
value : v1
backendRefs :
- name : demo-app-v1
port : 5000
- backendRefs :
- name : demo-app-v2
port : 5000
Any request to port 5000 of the demo-app Service that has the header env: v1 will be routed to demo-app-v1 , while any request without that header
will be routed to demo-app-v2 -- and since this is being handled by the
service mesh, not the ingress controller, the A/B test can happen anywhere in
the application's call graph.
How do I know this will be truly portable?
Gateway API has been investing heavily in conformance tests across all
features it supports, and mesh is no exception. One of the challenges that the
GAMMA initiative ran into is that many of these tests were strongly tied to
the idea that a given implementation provides an ingress controller. Many
service meshes don't, and requiring a GAMMA-conformant mesh to also implement
an ingress controller seemed impractical at best. This resulted in work
restarting on Gateway API conformance profiles , as discussed in GEP-1709 .
The basic idea of conformance profiles is that we can define subsets of the
Gateway API, and allow implementations to choose (and document) which subsets
they conform to. GAMMA is adding a new profile, named Mesh and described in
GEP-1686 , which checks only the mesh functionality as defined by GAMMA. At
this point, Kuma 2.3+, Linkerd 2.14+, and Istio 1.16+ are all conformant with
the Mesh profile.
What else is in Gateway API v0.8.0?
This release is all about preparing Gateway API for the upcoming v1.0 release
where HTTPRoute, Gateway, and GatewayClass will graduate to GA. There are two
main changes related to this: CEL validation and API version changes.
CEL Validation
The first major change is that Gateway API v0.8.0 is the start of a transition
from webhook validation to CEL validation using information built into
the CRDs. That will mean different things depending on the version of
Kubernetes you're using:
Kubernetes 1.25+
CEL validation is fully supported, and almost all validation is implemented in
CEL. (The sole exception is that header names in header modifier filters can
only do case-insensitive validation. There is more information in issue
2277 .)
We recommend not using the validating webhook on these Kubernetes versions.
Kubernetes 1.23 and 1.24
CEL validation is not supported, but Gateway API v0.8.0 CRDs can still be
installed. When you upgrade to Kubernetes 1.25+, the validation included in
these CRDs will automatically take effect.
We recommend continuing to use the validating webhook on these Kubernetes
versions.
Kubernetes 1.22 and older
Gateway API only commits to support for 5 most recent versions of
Kubernetes . As such, these versions are no longer
supported by Gateway API, and unfortunately Gateway API v0.8.0 cannot be
installed on them, since CRDs containing CEL validation will be rejected.
API Version Changes
As we prepare for a v1.0 release that will graduate Gateway, GatewayClass, and
HTTPRoute to the v1 API Version from v1beta1 , we are continuing the process
of moving away from v1alpha2 for resources that have graduated to v1beta1 .
For more information on this change and everything else included in this
release, refer to the v0.8.0 release notes .
How can I get started with Gateway API?
Gateway API represents the future of load balancing, routing, and service mesh
APIs in Kubernetes. There are already more than 20 implementations
available (including both ingress controllers and service meshes) and the list
keeps growing.
If you're interested in getting started with Gateway API, take a look at the
API concepts documentation and check out some of the
Guides to try it out. Because this is a CRD-based API, you can
install the latest version on any Kubernetes 1.23+ cluster.
If you're specifically interested in helping to contribute to Gateway API, we
would love to have you! Please feel free to open a new issue on the
repository, or join in the discussions . Also check out the community
page which includes links to the Slack channel and community
meetings. We look forward to seeing you!!
Further Reading:
GEP-1324 provides an overview of the GAMMA goals and some important
definitions. This GEP is well worth a read for its discussion of the problem
space.
GEP-1426 defines how to use Gateway API route resources, such as
HTTPRoute, to manage traffic within a service mesh.
GEP-1686 builds on the work of GEP-1709 to define a conformance
profile for service meshes to be declared conformant with Gateway API.
Although these are Experimental patterns, note that they are available
in the standard release channel , since the GAMMA initiative has not
needed to introduce new resources or fields to date.
U.S. Government Tackles Open Source, Memory-Safe Programming Security
The US government is paying more attention to open source software and memory-safe programming languages, and is requesting input from the private sector.
“GitHub hasn’t shipped many quality-of-life improvements to the inbox, which doesn’t have anywhere near the efficiency of an email inbox”
Every time you propose or push a change to a repository deployed on Vercel, there’s a comment by an automated Vercel bot on the repository. This pings everyone involved in the change in their GitHub inbox. Other deployment tools like Netlify do the same. Snyk (a developer security startup) automatically scans and keeps track of vulnerabilities in your codebase. These vulnerabilities are posted by an automated GitHub app (which has 178k installs). Whenever a package has a vulnerability, every re
GitHub hasn’t shipped many quality-of-life improvements to the inbox, which doesn’t have anywhere near the efficiency of an email inbox.
Tech Chiefs to Gather in Washington Next Month on A.I. Regulations (Gift Article)
The leaders of Google, OpenAI, Microsoft and others will meet with lawmakers on Sept. 13 to kick off listening sessions that may shape A.I. rules in the United States.
None of us want to admit that we would rather feel overwhelmed than underwhelmed. In fact, we often experience a greater sense of our own value when we’re working than we do when we’re not. Working is not just a way to stay busy, but also to prove our worthiness – to others and to ourselves. The result is that without the right guardrails in place, we silently collude with employers who encourage us to overwork through intense pressure to perform. The authors outline strategies for intervening if you find yourself compulsively overworking, including honestly recognizing your tendency to work long and continuous hours, prioritizing sleep and movement, and choosing one activity outside of work that brings you true enjoyment.
Above Avalon: Apple Gives Sneak Peek Inside Apple Vision Pro Labs, Vision Pro Apps vs. Apple Watch Apps
Welcome to a new week. Today’s update takes us to Vision Pro land. Apple is peeling back the cover of its Apple Vision Pro developer labs. We examine Apple’s motivation for hosting the labs. The discussion then turns to key differences between early Apple Watch app development and what we see unfold
Global cybercrime treaty could be ‘disastrous for human rights,’ NGOs warn
Human rights organizations are raising alarms about a United Nations cybercrime treaty currently under negotiation, warning that the rules could expand the surveillance power of governments and give dictatorships further tools of repression.
I’ve worked on distributed systems that have exhausted inodes before and whoa was that wild. | How to identify the file responsible for a disk error
When you run First Aid, its reports an error with an inode. Here’s how to identify the item responsible by converting that inode number to a file path.
Blog: Kubernetes 1.28: A New (alpha) Mechanism For Safer Cluster Upgrades
Author: Richa Banker (Google)
This blog describes the mixed version proxy , a new alpha feature in Kubernetes 1.28. The
mixed version proxy enables an HTTP request for a resource to be served by the correct API server
in cases where there are multiple API servers at varied versions in a cluster. For example,
this is useful during a cluster upgrade, or when you're rolling out the runtime configuration of
the cluster's control plane.
What problem does this solve?
When a cluster undergoes an upgrade, the kube-apiservers existing at different versions in that scenario can serve different sets (groups, versions, resources) of built-in resources. A resource request made in this scenario may be served by any of the available apiservers, potentially resulting in the request ending up at an apiserver that may not be aware of the requested resource; consequently it being served a 404 not found error which is incorrect. Furthermore, incorrect serving of the 404 errors can lead to serious consequences such as namespace deletion being blocked incorrectly or objects being garbage collected mistakenly.
How do we solve the problem?
The new feature “Mixed Version Proxy” provides the kube-apiserver with the capability to proxy a request to a peer kube-apiserver which is aware of the requested resource and hence can serve the request. To do this, a new filter has been added to the handler chain in the API server's aggregation layer.
The new filter in the handler chain checks if the request is for a group/version/resource that the apiserver doesn't know about (using the existing StorageVersion API ). If so, it proxies the request to one of the apiservers that is listed in the ServerStorageVersion object. If the identified peer apiserver fails to respond (due to reasons like network connectivity, race between the request being received and the controller registering the apiserver-resource info in ServerStorageVersion object), then error 503("Service Unavailable") is served.
To prevent indefinite proxying of the request, a (new for v1.28) HTTP header X-Kubernetes-APIServer-Rerouted: true is added to the original request once it is determined that the request cannot be served by the original API server. Setting that to true marks that the original API server couldn't handle the request and it should therefore be proxied. If a destination peer API server sees this header, it never proxies the request further.
To set the network location of a kube-apiserver that peers will use to proxy requests, the value passed in --advertise-address or (when --advertise-address is unspecified) the --bind-address flag is used. For users with network configurations that would not allow communication between peer kube-apiservers using the addresses specified in these flags, there is an option to pass in the correct peer address as --peer-advertise-ip and --peer-advertise-port flags that are introduced in this feature.
How do I enable this feature?
Following are the required steps to enable the feature:
Download the latest Kubernetes project (version v1.28.0 or later)
Switch on the feature gate with the command line flag --feature-gates=UnknownVersionInteroperabilityProxy=true on the kube-apiservers
Pass the CA bundle that will be used by source kube-apiserver to authenticate destination kube-apiserver's serving certs using the flag --peer-ca-file on the kube-apiservers. Note: this is a required flag for this feature to work. There is no default value enabled for this flag.
Pass the correct ip and port of the local kube-apiserver that will be used by peers to connect to this kube-apiserver while proxying a request. Use the flags --peer-advertise-ip and peer-advertise-port to the kube-apiservers upon startup. If unset, the value passed to either --advertise-address or --bind-address is used. If those too, are unset, the host's default interface will be used.
What’s missing?
Currently we only proxy resource requests to a peer kube-apiserver when its determined to do so. Next we need to address how to work discovery requests in such scenarios. Right now we are planning to have the following capabilities for beta
Merged discovery across all kube-apiservers
Use an egress dialer for network connections made to peer kube-apiservers
How can I learn more?
Read the Mixed Version Proxy documentation
Read KEP-4020: Unknown Version Interoperability Proxy
How can I get involved?
Reach us on Slack : #sig-api-machinery , or through the mailing list .
Huge thanks to the contributors that have helped in the design, implementation, and review of this feature: Daniel Smith, Han Kang, Joe Betz, Jordan Liggit, Antonio Ojea, David Eads and Ben Luddy!