-
Notifications
You must be signed in to change notification settings - Fork 71
Add VpcAssociationPolicy CRD #396
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Changes from all commits
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,107 @@ | ||
| --- | ||
| apiVersion: apiextensions.k8s.io/v1 | ||
| kind: CustomResourceDefinition | ||
| metadata: | ||
| annotations: | ||
| controller-gen.kubebuilder.io/version: v0.13.0 | ||
| name: vpcassociationpolicies.application-networking.k8s.aws | ||
| spec: | ||
| group: application-networking.k8s.aws | ||
| names: | ||
| categories: | ||
| - gateway-api | ||
| kind: VpcAssociationPolicy | ||
| listKind: VpcAssociationPolicyList | ||
| plural: vpcassociationpolicies | ||
| shortNames: | ||
| - vap | ||
| singular: vpcassociationpolicy | ||
| scope: Namespaced | ||
| versions: | ||
| - additionalPrinterColumns: | ||
| - jsonPath: .metadata.creationTimestamp | ||
| name: Age | ||
| type: date | ||
| name: v1alpha1 | ||
| schema: | ||
| openAPIV3Schema: | ||
| properties: | ||
| apiVersion: | ||
| description: 'APIVersion defines the versioned schema of this representation | ||
| of an object. Servers should convert recognized schemas to the latest | ||
| internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources' | ||
| type: string | ||
| kind: | ||
| description: 'Kind is a string value representing the REST resource this | ||
| object represents. Servers may infer this from the endpoint the client | ||
| submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds' | ||
| type: string | ||
| metadata: | ||
| type: object | ||
| spec: | ||
| description: VpcAssociationPolicySpec defines the desired state of VpcAssociationPolicy. | ||
| properties: | ||
| associateWithVpc: | ||
| description: "AssociateWithVpc indicates whether the VpcServiceNetworkAssociation | ||
| should be created for the current VPC of k8s cluster. \n Both this | ||
| flag and Gateway annotation \"application-networking.k8s.aws/lattice-vpc-association\" | ||
| are reserved tentatively for backward compatibility. Either one | ||
| of them set to true or both of them undefined will result in the | ||
| VpcServiceNetworkAssociation created." | ||
| type: boolean | ||
| securityGroupIds: | ||
| description: "SecurityGroupIds defines the security groups enforced | ||
| on the VpcServiceNetworkAssociation. Security groups does not take | ||
| effect if AssociateWithVpc is set to false. \n For more details, | ||
| please check the VPC Lattice documentation https://docs.aws.amazon.com/vpc-lattice/latest/ug/security-groups.html" | ||
| items: | ||
| maxLength: 32 | ||
| minLength: 3 | ||
| pattern: ^sg-[0-9a-z]+$ | ||
| type: string | ||
| minItems: 1 | ||
| type: array | ||
| targetRef: | ||
| description: "TargetRef points to the kubernetes Gateway resource | ||
| that will have this policy attached. \n This field is following | ||
| the guidelines of Kubernetes Gateway API policy attachment." | ||
| properties: | ||
| group: | ||
| description: Group is the group of the target resource. | ||
| maxLength: 253 | ||
| pattern: ^$|^[a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*$ | ||
| type: string | ||
| kind: | ||
| description: Kind is kind of the target resource. | ||
| maxLength: 63 | ||
| minLength: 1 | ||
| pattern: ^[a-zA-Z]([-a-zA-Z0-9]*[a-zA-Z0-9])?$ | ||
| type: string | ||
| name: | ||
| description: Name is the name of the target resource. | ||
| maxLength: 253 | ||
| minLength: 1 | ||
| type: string | ||
| namespace: | ||
| description: Namespace is the namespace of the referent. When | ||
| unspecified, the local namespace is inferred. Even when policy | ||
| targets a resource in a different namespace, it MUST only apply | ||
| to traffic originating from the same namespace as the policy. | ||
| maxLength: 63 | ||
| minLength: 1 | ||
| pattern: ^[a-z0-9]([-a-z0-9]*[a-z0-9])?$ | ||
| type: string | ||
| required: | ||
| - group | ||
| - kind | ||
| - name | ||
| type: object | ||
| required: | ||
| - targetRef | ||
| type: object | ||
| required: | ||
| - spec | ||
| type: object | ||
| served: true | ||
| storage: true | ||
| subresources: {} |
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,107 @@ | ||
| --- | ||
| apiVersion: apiextensions.k8s.io/v1 | ||
| kind: CustomResourceDefinition | ||
| metadata: | ||
| annotations: | ||
| controller-gen.kubebuilder.io/version: v0.13.0 | ||
| name: vpcassociationpolicies.application-networking.k8s.aws | ||
| spec: | ||
| group: application-networking.k8s.aws | ||
| names: | ||
| categories: | ||
| - gateway-api | ||
| kind: VpcAssociationPolicy | ||
| listKind: VpcAssociationPolicyList | ||
| plural: vpcassociationpolicies | ||
| shortNames: | ||
| - vap | ||
| singular: vpcassociationpolicy | ||
| scope: Namespaced | ||
| versions: | ||
| - additionalPrinterColumns: | ||
| - jsonPath: .metadata.creationTimestamp | ||
| name: Age | ||
| type: date | ||
| name: v1alpha1 | ||
| schema: | ||
| openAPIV3Schema: | ||
| properties: | ||
| apiVersion: | ||
| description: 'APIVersion defines the versioned schema of this representation | ||
| of an object. Servers should convert recognized schemas to the latest | ||
| internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources' | ||
| type: string | ||
| kind: | ||
| description: 'Kind is a string value representing the REST resource this | ||
| object represents. Servers may infer this from the endpoint the client | ||
| submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds' | ||
| type: string | ||
| metadata: | ||
| type: object | ||
| spec: | ||
| description: VpcAssociationPolicySpec defines the desired state of VpcAssociationPolicy. | ||
| properties: | ||
| associateWithVpc: | ||
| description: "AssociateWithVpc indicates whether the VpcServiceNetworkAssociation | ||
| should be created for the current VPC of k8s cluster. \n Both this | ||
| flag and Gateway annotation \"application-networking.k8s.aws/lattice-vpc-association\" | ||
| are reserved tentatively for backward compatibility. Either one | ||
| of them set to true or both of them undefined will result in the | ||
| VpcServiceNetworkAssociation created." | ||
| type: boolean | ||
| securityGroupIds: | ||
| description: "SecurityGroupIds defines the security groups enforced | ||
| on the VpcServiceNetworkAssociation. Security groups does not take | ||
| effect if AssociateWithVpc is set to false. \n For more details, | ||
| please check the VPC Lattice documentation https://docs.aws.amazon.com/vpc-lattice/latest/ug/security-groups.html" | ||
| items: | ||
| maxLength: 32 | ||
| minLength: 3 | ||
| pattern: ^sg-[0-9a-z]+$ | ||
| type: string | ||
| minItems: 1 | ||
| type: array | ||
| targetRef: | ||
| description: "TargetRef points to the kubernetes Gateway resource | ||
| that will have this policy attached. \n This field is following | ||
| the guidelines of Kubernetes Gateway API policy attachment." | ||
| properties: | ||
| group: | ||
| description: Group is the group of the target resource. | ||
| maxLength: 253 | ||
| pattern: ^$|^[a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*$ | ||
| type: string | ||
| kind: | ||
| description: Kind is kind of the target resource. | ||
| maxLength: 63 | ||
| minLength: 1 | ||
| pattern: ^[a-zA-Z]([-a-zA-Z0-9]*[a-zA-Z0-9])?$ | ||
| type: string | ||
| name: | ||
| description: Name is the name of the target resource. | ||
| maxLength: 253 | ||
| minLength: 1 | ||
| type: string | ||
| namespace: | ||
| description: Namespace is the namespace of the referent. When | ||
| unspecified, the local namespace is inferred. Even when policy | ||
| targets a resource in a different namespace, it MUST only apply | ||
| to traffic originating from the same namespace as the policy. | ||
| maxLength: 63 | ||
| minLength: 1 | ||
| pattern: ^[a-z0-9]([-a-z0-9]*[a-z0-9])?$ | ||
| type: string | ||
| required: | ||
| - group | ||
| - kind | ||
| - name | ||
| type: object | ||
| required: | ||
| - targetRef | ||
| type: object | ||
| required: | ||
| - spec | ||
| type: object | ||
| served: true | ||
| storage: true | ||
| subresources: {} |
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,71 @@ | ||
| package v1alpha1 | ||
|
|
||
| import ( | ||
| metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" | ||
| "k8s.io/apimachinery/pkg/types" | ||
| "sigs.k8s.io/gateway-api/apis/v1alpha2" | ||
|
|
||
| "github.com/aws/aws-application-networking-k8s/pkg/k8s" | ||
| ) | ||
|
|
||
| const ( | ||
| VpcAssociationPolicyKind = "VpcAssociationPolicy" | ||
| ) | ||
|
|
||
| // +genclient | ||
| // +kubebuilder:object:root=true | ||
| // +kubebuilder:resource:categories=gateway-api,shortName=vap | ||
| // +kubebuilder:storageversion | ||
| // +kubebuilder:printcolumn:name="Age",type=date,JSONPath=`.metadata.creationTimestamp` | ||
| type VpcAssociationPolicy struct { | ||
| metav1.TypeMeta `json:",inline"` | ||
| metav1.ObjectMeta `json:"metadata,omitempty"` | ||
|
|
||
| Spec VpcAssociationPolicySpec `json:"spec"` | ||
| } | ||
|
|
||
| // +kubebuilder:object:root=true | ||
| // VpcAssociationPolicyList contains a list of VpcAssociationPolicies. | ||
| type VpcAssociationPolicyList struct { | ||
| metav1.TypeMeta `json:",inline"` | ||
| metav1.ListMeta `json:"metadata,omitempty"` | ||
| Items []VpcAssociationPolicy `json:"items"` | ||
| } | ||
|
|
||
| // +kubebuilder:validation:MaxLength=32 | ||
| // +kubebuilder:validation:MinLength=3 | ||
| // +kubebuilder:validation:Pattern=`^sg-[0-9a-z]+$` | ||
| type SecurityGroupId string | ||
|
|
||
| // VpcAssociationPolicySpec defines the desired state of VpcAssociationPolicy. | ||
| type VpcAssociationPolicySpec struct { | ||
|
|
||
| // SecurityGroupIds defines the security groups enforced on the VpcServiceNetworkAssociation. | ||
| // Security groups does not take effect if AssociateWithVpc is set to false. | ||
| // | ||
| // For more details, please check the VPC Lattice documentation https://docs.aws.amazon.com/vpc-lattice/latest/ug/security-groups.html | ||
| // | ||
| // +optional | ||
| // +kubebuilder:validation:MinItems=1 | ||
| SecurityGroupIds []SecurityGroupId `json:"securityGroupIds,omitempty"` | ||
|
|
||
| // AssociateWithVpc indicates whether the VpcServiceNetworkAssociation should be created for the current VPC of k8s cluster. | ||
| // | ||
| // Both this flag and Gateway annotation "application-networking.k8s.aws/lattice-vpc-association" are reserved tentatively for backward compatibility. | ||
| // Either one of them set to true or both of them undefined will result in the VpcServiceNetworkAssociation created. | ||
| // +optional | ||
| AssociateWithVpc *bool `json:"associateWithVpc,omitempty"` | ||
|
Contributor
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. looking at this I'm thinking it is quite not straightforward to have optional value true by default. Could we have an inverse of this option?
Contributor
Author
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. I can remove the I will do that in the controller code logic: |
||
|
|
||
| // TargetRef points to the kubernetes Gateway resource that will have this policy attached. | ||
| // | ||
| // This field is following the guidelines of Kubernetes Gateway API policy attachment. | ||
| TargetRef *v1alpha2.PolicyTargetReference `json:"targetRef"` | ||
| } | ||
|
|
||
| func (p *VpcAssociationPolicy) GetTargetRef() *v1alpha2.PolicyTargetReference { | ||
| return p.Spec.TargetRef | ||
| } | ||
|
|
||
| func (p *VpcAssociationPolicy) GetNamespacedName() types.NamespacedName { | ||
| return k8s.NamespacedName(p) | ||
| } | ||
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Worth mentioning that it does not take any effect when it is not associated with vpc