Terraform Client VPN ਰੂਟ: ਸਬਨੈੱਟਾਂ ਤੋਂ ਵੱਧ CIDR ਨਾਲ
ਐਸੋਸੀਏਸ਼ਨ, ਰੂਟ ਅਤੇ ਅਧਿਕਾਰ ਵੱਖਰੀਆਂ ਵਸਤੂਆਂ ਹਨ। ਛੋਟੀ ਸਬਨੈੱਟ ਸੂਚੀ ਨੂੰ ਇੰਡੈਕਸ ਕਰਨ ਦੀ ਬਜਾਏ ਹਰ ਮੰਜ਼ਿਲ CIDR ਨੂੰ ਸੰਬੰਧਿਤ ਸਬਨੈੱਟ ਨਾਲ ਮੈਪ ਕਰੋ।
ਇੱਕ ਲੈਪਟਾਪ Client VPN ਐਂਡਪੌਇੰਟ ਨਾਲ ਜੁੜਦਾ ਹੈ, ਅਤੇ terraform apply ਅਜੇ ਵੀ ਰੂਟ ਸਰੋਤ ਉੱਤੇ ਫੇਲ ਹੁੰਦਾ ਹੈ। ਕੌਨਫਿਗਰੇਸ਼ਨ ਵਿੱਚ ਆਮ ਤੌਰ 'ਤੇ ਸੰਬੰਧਿਤ ਸਬਨੈੱਟਾਂ ਤੋਂ ਵੱਧ ਮੰਜ਼ਿਲ CIDR ਹੁੰਦੇ ਹਨ, ਅਤੇ ਰੂਟ ਬਲਾਕ ਇੰਡੈਕਸ ਨਾਲ ਟਾਰਗਿਟ ਚੁਣਦਾ ਹੈ। ਇਹ ਮੰਨਦਾ ਹੈ ਕਿ ਦੋਵੇਂ ਸੰਗ੍ਰਹਿ ਸਮਾਨਾਂਤਰ ਹਨ। ਉਹ ਨਹੀਂ ਹਨ, ਅਤੇ ਫੇਲ ਸਮੀਖਿਆ ਦੀ ਬਜਾਏ ਲਾਗੂ ਕਰਨ ਦੇ ਸਮੇਂ ਦਿਖਾਈ ਦਿੰਦੀ ਹੈ।
ਫੇਲ ਹੋਣ ਵਾਲੀ ਵਸਤੂ ਦਾ ਨਾਮ ਦਿਓ
ਤਿੰਨ ਸਰੋਤ ਸ਼ਾਮਲ ਹਨ ਅਤੇ ਹਰ ਇੱਕ ਵੱਖਰੇ ਸਵਾਲ ਦਾ ਜਵਾਬ ਦਿੰਦਾ ਹੈ। ਐਸੋਸੀਏਸ਼ਨ ਐਂਡਪੌਇੰਟ ਦਾ ਨੈੱਟਵਰਕ ਇੰਟਰਫੇਸ ਸਬਨੈੱਟ ਵਿੱਚ ਰੱਖਦੀ ਹੈ। ਰੂਟ ਦੱਸਦਾ ਹੈ ਕਿ ਕਿਹੜਾ ਮੰਜ਼ਿਲ ਪ੍ਰੀਫਿਕਸ ਟਾਰਗਿਟ ਸਬਨੈੱਟ ਨੂੰ ਪਹੁੰਚਾਇਆ ਜਾਂਦਾ ਹੈ। ਅਧਿਕਾਰ ਨਿਯਮ ਦੱਸਦਾ ਹੈ ਕਿ ਕਿਹੜੇ ਵਰਤੋਂਕਾਰ ਕਿਹੜੇ ਪ੍ਰੀਫਿਕਸ ਤੱਕ ਪਹੁੰਚ ਸਕਦੇ ਹਨ। ਕਦੇ ਸੰਬੰਧਿਤ ਨਾ ਹੋਏ ਸਬਨੈੱਟ ਵੱਲ ਇਸ਼ਾਰਾ ਕਰਨ ਵਾਲਾ ਰੂਟ ਦੋਵੇਂ ਵਸਤੂਆਂ ਹੋਣ ਦੇ ਬਾਵਜੂਦ ਫੇਲ ਹੁੰਦਾ ਹੈ, ਕਿਉਂਕਿ ਟਾਰਗਿਟ ਇਸ ਐਂਡਪੌਇੰਟ ਦਾ ਹੋਣਾ ਚਾਹੀਦਾ ਹੈ।
ਪਹਿਲਾਂ ਐਸੋਸੀਏਸ਼ਨਾਂ ਦੀ ਸੂਚੀ ਬਣਾਓ: aws ec2 describe-client-vpn-target-networks --client-vpn-endpoint-id cvpn-endpoint-0123456789abcdef0।
VPC ਦੇ ਸਥਾਨਕ ਰੂਟ ਨੂੰ ਯਾਦ ਰੱਖੋ
ਪਹਿਲੀ ਐਸੋਸੀਏਸ਼ਨ ਪੂਰੇ VPC ਲਈ ਸਥਾਨਕ ਰੂਟ ਜੋੜਦੀ ਹੈ, ਇਸ ਲਈ ਉਸ VPC ਦਾ ਹਰ ਸਬਨੈੱਟ ਰੂਟ ਸਰੋਤ ਤੋਂ ਬਿਨਾਂ ਹੀ ਪਹੁੰਚਯੋਗ ਹੈ। ਪੀਅਰ ਕੀਤੇ VPC, Transit Gateway ਕਨੈਕਸ਼ਨ ਅਤੇ VPC ਦੀ ਮਲਕੀਅਤ ਵਾਲੇ ਨਾ ਹੋਣ ਵਾਲੇ on-premises ਪ੍ਰੀਫਿਕਸ ਲਈ ਵਾਧੂ ਰੂਟ ਹੁੰਦੇ ਹਨ। ਇਸ ਲਈ ਤਿੰਨ ਐਸੋਸੀਏਸ਼ਨਾਂ ਵਾਲਾ ਐਂਡਪੌਇੰਟ ਕਾਨੂੰਨੀ ਤੌਰ 'ਤੇ ਸੱਤ ਮੰਜ਼ਿਲ ਐਂਟਰੀਆਂ ਲੈ ਕੇ ਚੱਲ ਸਕਦਾ ਹੈ।
ਰੂਟ ਜੋੜਨ ਤੋਂ ਪਹਿਲਾਂ VPC ਤੋਂ ਬਾਹਰ ਪੈਣ ਵਾਲੀਆਂ ਮੰਜ਼ਿਲਾਂ ਦੀ ਗਿਣਤੀ ਕਰੋ। ਜੇ ਇਹ ਗਿਣਤੀ CIDR ਸੂਚੀ ਤੋਂ ਘੱਟ ਹੈ, ਤਾਂ ਸੂਚੀ ਅਜਿਹੇ ਸਬਨੈੱਟਾਂ ਦਾ ਵਰਣਨ ਕਰਦੀ ਹੈ ਜਿਨ੍ਹਾਂ ਨੂੰ ਕੋਈ ਰੂਟ ਲੋੜੀਂਦਾ ਹੀ ਨਹੀਂ।
ਇੰਡੈਕਸ ਨੂੰ ਨਕਸ਼ੇ ਨਾਲ ਬਦਲੋ
ਇੰਡੈਕਸ ਨੂੰ ਮਾਡਿਊਲੋ ਆਪਰੇਟਰ ਵਿੱਚ ਲਪੇਟਣ ਨਾਲ ਗਲਤੀ ਚੁੱਪ ਹੋ ਜਾਂਦੀ ਹੈ ਅਤੇ ਮਾਡਲਿੰਗ ਦੀ ਗਲਤੀ ਰਹਿ ਜਾਂਦੀ ਹੈ। ਚੁਣੇ ਟਾਰਗਿਟ ਰਾਹੀਂ ਨਾ ਪਹੁੰਚਣ ਯੋਗ ਮੰਜ਼ਿਲ, ਯੋਜਨਾ ਕਿੰਨੀ ਵੀ ਸਾਫ਼ ਤਰੀਕੇ ਨਾਲ ਲਾਗੂ ਹੋਵੇ, ਕੋਈ ਟ੍ਰੈਫਿਕ ਨਹੀਂ ਢੋਂਦੀ। ਇਸ ਦੀ ਬਜਾਏ ਸੰਬੰਧ ਸੰਭਾਲੋ, ਅਤੇ ਕੁਝ ਵੀ ਬਣਾਉਣ ਤੋਂ ਪਹਿਲਾਂ Terraform ਨੂੰ ਇਹ ਜਾਂਚਣ ਦਿਓ। ਹੇਠਾਂ ਦਿੱਤਾ ਬਲਾਕ ਉਦਾਹਰਨ ਹੈ ਅਤੇ ਪ੍ਰੋਵਾਈਡਰ ਦੇ ਐਂਡਪੌਇੰਟ ਰੂਟ ਆਰਗਿਊਮੈਂਟ ਵਰਤਦਾ ਹੈ।
variable "client_vpn_destinations" {
description = "Destination CIDR mapped to an associated subnet key"
type = map(string)
}
resource "aws_ec2_client_vpn_route" "this" {
for_each = var.client_vpn_destinations
client_vpn_endpoint_id = aws_ec2_client_vpn_endpoint.this.id
destination_cidr_block = each.key
target_vpc_subnet_id = aws_subnet.private[each.value].id
lifecycle {
precondition {
condition = contains(keys(aws_subnet.private), each.value)
error_message = "Route target must be a subnet key in the associated map."
}
}
}
ਜਦੋਂ ਨਕਸ਼ਾ ਐਸੋਸੀਏਸ਼ਨ ਸੂਚੀ ਦੇ ਕੋਲ ਹੁੰਦਾ ਹੈ, ਮੰਜ਼ਿਲ ਜੋੜਨ ਨਾਲ ਇਹ ਫੈਸਲਾ ਕਰਨਾ ਪੈਂਦਾ ਹੈ ਕਿ ਕਿਹੜਾ ਸਬਨੈੱਟ ਇਸਨੂੰ ਢੋਵੇਗਾ। ਇਹ ਉਹ ਗੱਲਬਾਤ ਹੈ ਜੋ ਇੰਡੈਕਸ ਲੁਕਾਉਂਦਾ ਸੀ।
ਦੂਜੀ ਫੇਲ ਇੰਡੈਕਸ ਗਲਤੀ ਦੀ ਬਜਾਏ ਬੇਮਤਲਬ ਮੁੱਲ ਪੈਦਾ ਕਰਦੀ ਹੈ। ਉੱਚ ਪੱਧਰੀ ਇੰਟਰਫੇਸ ਦੀ ਉਮੀਦ ਵਾਲੀ ਥਾਂ 'ਤੇ ਨੀਵਾਂ ਪੱਧਰੀ ਬਣਾਵਟ ਭੇਜਣ ਨਾਲ API ਵੱਲੋਂ ਪੜ੍ਹੇ ਜਾਣ ਵਾਲੇ ਖੇਤਰ ਭਰੇ ਨਹੀਂ ਰਹਿੰਦੇ, ਅਤੇ ਨਤੀਜਾ CIDR ਨਕਾਰਾ ਹੋ ਜਾਂਦਾ ਹੈ। ਜਦੋਂ ਵਸਤੂ ਦੀ ਉਮੀਦ ਵਾਲੀ ਥਾਂ 'ਤੇ ਸਤਰ ਆਉਂਦੀ ਹੈ, Terraform ਉਹੀ ਆਕਾਰ ਦਿਖਾਉਂਦਾ ਹੈ। ਆਰਗਿਊਮੈਂਟ ਦੀ ਕਿਸਮ ਲਈ ਪ੍ਰੋਵਾਈਡਰ ਦੀ ਸਕੀਮਾ ਵੇਖੋ।
ਇਸਨੂੰ ਕਲਾਇੰਟ ਤੋਂ ਸਾਬਤ ਕਰੋ
ਲਾਗੂ ਕਰਨ ਤੋਂ ਪਹਿਲਾਂ terraform validate ਅਤੇ ਅਸਲ ਸਥਿਤੀ ਦੇ ਖਿਲਾਫ਼ ਯੋਜਨਾ ਚਲਾਓ। ਫਿਰ ਸਫਲ apply 'ਤੇ ਭਰੋਸਾ ਕਰਨ ਦੀ ਬਜਾਏ ਐਂਡਪੌਇੰਟ ਦੀ ਟਾਰਗਿਟ-ਨੈੱਟਵਰਕ ਸੂਚੀ ਨੂੰ ਨਕਸ਼ੇ ਨਾਲ ਤੁਲਨਾ ਕਰੋ।
ਸਵੀਕ੍ਰਿਤੀ ਟੈਸਟ ਇੱਕ ਜੁੜਿਆ ਕਲਾਇੰਟ ਹੈ ਜੋ ਹਰ ਇੱਛਤ ਪ੍ਰੀਫਿਕਸ ਤੱਕ ਪਹੁੰਚਦਾ ਹੈ।
ਅਧਿਕਾਰ ਨਿਯਮ ਉਹ ਥਾਂ ਹੈ ਜਿੱਥੇ ਬਹੁਤ ਸਾਰੇ ਸੈਟਅਪ ਜਲਦੀ ਰੁਕ ਜਾਂਦੇ ਹਨ। ਇਹ ਮੰਜ਼ਿਲ CIDR ਅਤੇ ਸਮੂਹ ਤੱਕ ਸੀਮਿਤ ਹੈ, ਅਤੇ ਮਿਲਦੇ ਅਧਿਕਾਰ ਤੋਂ ਬਿਨਾਂ ਰੂਟ ਉਹ ਜੁੜਿਆ ਕਲਾਇੰਟ ਬਣਾਉਂਦਾ ਹੈ ਜੋ ਪ੍ਰੀਫਿਕਸ ਤੱਕ ਨਹੀਂ ਪਹੁੰਚ ਸਕਦਾ। ਹਰ ਪ੍ਰੀਫਿਕਸ ਲਈ ਦੋਵੇਂ ਵਸਤੂਆਂ ਜਾਂਚੋ, ਕਿਉਂਕਿ ਰੂਟ ਬਣਾ ਕੇ ਨਿਯਮ ਭੁੱਲਣ ਵਾਲਾ apply ਪੂਰਾ ਦਿਖਦਾ ਹੈ। ਸਮੂਹ ਦੇ ਅੰਦਰ ਇੱਕ ਅਤੇ ਬਾਹਰ ਇੱਕ ਵਰਤੋਂਕਾਰ ਨਾਲ ਟੈਸਟ ਕਰੋ।
ਜਦੋਂ ਇੱਕ ਪ੍ਰੀਫਿਕਸ ਫੇਲ ਹੁੰਦਾ ਹੈ, ਤਾਂ ਇਸਦੀ ਰੂਟ ਐਂਟਰੀ ਦੀ ਅਧਿਕਾਰ ਨਿਯਮ ਨਾਲ ਤੁਲਨਾ ਕਰੋ। ਗੈਰਹਾਜ਼ਰ ਅਧਿਕਾਰ ਅਤੇ ਗੈਰਹਾਜ਼ਰ ਰੂਟ ਕਲਾਇੰਟ ਲੌਗ ਵਿੱਚ ਸਮਾਨ ਦਿਖਦੇ ਹਨ ਅਤੇ ਵੱਖਰੇ ਸਰੋਤਾਂ ਵਿੱਚ ਠੀਕ ਕੀਤੇ ਜਾਂਦੇ ਹਨ।