@@ -43,6 +43,17 @@ import (
43
43
"sigs.k8s.io/cluster-api/util/conditions"
44
44
)
45
45
46
+ var stubInfraV1TargetGroupSpecAPI = infrav1.TargetGroupSpec {
47
+ Name : "name" ,
48
+ Port : infrav1 .DefaultAPIServerPort ,
49
+ Protocol : "TCP" ,
50
+ HealthCheck : & infrav1.TargetGroupHealthCheck {
51
+ IntervalSeconds : aws .Int64 (10 ),
52
+ TimeoutSeconds : aws .Int64 (5 ),
53
+ ThresholdCount : aws .Int64 (5 ),
54
+ },
55
+ }
56
+
46
57
func TestELBName (t * testing.T ) {
47
58
tests := []struct {
48
59
name string
@@ -842,7 +853,7 @@ func TestRegisterInstanceWithAPIServerNLB(t *testing.T) {
842
853
TargetGroups : []* elbv2.TargetGroup {
843
854
{
844
855
HealthCheckEnabled : aws .Bool (true ),
845
- HealthCheckPort : aws .String (" infrav1.DefaultAPIServerPort" ),
856
+ HealthCheckPort : aws .String (infrav1 .DefaultAPIServerPortString ),
846
857
HealthCheckProtocol : aws .String ("TCP" ),
847
858
LoadBalancerArns : aws .StringSlice ([]string {elbArn }),
848
859
Port : aws .Int64 (infrav1 .DefaultAPIServerPort ),
@@ -945,7 +956,7 @@ func TestRegisterInstanceWithAPIServerNLB(t *testing.T) {
945
956
TargetGroups : []* elbv2.TargetGroup {
946
957
{
947
958
HealthCheckEnabled : aws .Bool (true ),
948
- HealthCheckPort : aws .String (" infrav1.DefaultAPIServerPort" ),
959
+ HealthCheckPort : aws .String (infrav1 .DefaultAPIServerPortString ),
949
960
HealthCheckProtocol : aws .String ("TCP" ),
950
961
LoadBalancerArns : aws .StringSlice ([]string {elbArn }),
951
962
Port : aws .Int64 (infrav1 .DefaultAPIServerPort ),
@@ -1189,13 +1200,14 @@ func TestCreateNLB(t *testing.T) {
1189
1200
},
1190
1201
}, nil )
1191
1202
m .CreateTargetGroup (gomock .Eq (& elbv2.CreateTargetGroupInput {
1192
- HealthCheckEnabled : aws .Bool (true ),
1193
- HealthCheckPort : aws .String ("infrav1.DefaultAPIServerPort" ),
1194
- HealthCheckProtocol : aws .String ("tcp" ),
1195
- Name : aws .String ("name" ),
1196
- Port : aws .Int64 (infrav1 .DefaultAPIServerPort ),
1197
- Protocol : aws .String ("TCP" ),
1198
- VpcId : aws .String (vpcID ),
1203
+ HealthCheckEnabled : aws .Bool (true ),
1204
+ HealthCheckPort : aws .String (infrav1 .DefaultAPIServerPortString ),
1205
+ HealthCheckProtocol : aws .String ("tcp" ),
1206
+ UnhealthyThresholdCount : aws .Int64 (infrav1 .DefaultAPIServerUnhealthThresholdCount ),
1207
+ Name : aws .String ("name" ),
1208
+ Port : aws .Int64 (infrav1 .DefaultAPIServerPort ),
1209
+ Protocol : aws .String ("TCP" ),
1210
+ VpcId : aws .String (vpcID ),
1199
1211
Tags : []* elbv2.Tag {
1200
1212
{
1201
1213
Key : aws .String ("test" ),
@@ -1291,14 +1303,15 @@ func TestCreateNLB(t *testing.T) {
1291
1303
},
1292
1304
}, nil )
1293
1305
m .CreateTargetGroup (gomock .Eq (& elbv2.CreateTargetGroupInput {
1294
- HealthCheckEnabled : aws .Bool (true ),
1295
- HealthCheckPort : aws .String ("infrav1.DefaultAPIServerPort" ),
1296
- HealthCheckProtocol : aws .String ("tcp" ),
1297
- Name : aws .String ("name" ),
1298
- Port : aws .Int64 (infrav1 .DefaultAPIServerPort ),
1299
- Protocol : aws .String ("TCP" ),
1300
- VpcId : aws .String (vpcID ),
1301
- IpAddressType : aws .String ("ipv6" ),
1306
+ HealthCheckEnabled : aws .Bool (true ),
1307
+ HealthCheckPort : aws .String (infrav1 .DefaultAPIServerPortString ),
1308
+ HealthCheckProtocol : aws .String ("tcp" ),
1309
+ UnhealthyThresholdCount : aws .Int64 (infrav1 .DefaultAPIServerUnhealthThresholdCount ),
1310
+ Name : aws .String ("name" ),
1311
+ Port : aws .Int64 (infrav1 .DefaultAPIServerPort ),
1312
+ Protocol : aws .String ("TCP" ),
1313
+ VpcId : aws .String (vpcID ),
1314
+ IpAddressType : aws .String ("ipv6" ),
1302
1315
Tags : []* elbv2.Tag {
1303
1316
{
1304
1317
Key : aws .String ("test" ),
@@ -1529,13 +1542,14 @@ func TestCreateNLB(t *testing.T) {
1529
1542
},
1530
1543
}, nil )
1531
1544
m .CreateTargetGroup (gomock .Eq (& elbv2.CreateTargetGroupInput {
1532
- HealthCheckEnabled : aws .Bool (true ),
1533
- HealthCheckPort : aws .String ("infrav1.DefaultAPIServerPort" ),
1534
- HealthCheckProtocol : aws .String ("tcp" ),
1535
- Name : aws .String ("name" ),
1536
- Port : aws .Int64 (infrav1 .DefaultAPIServerPort ),
1537
- Protocol : aws .String ("TCP" ),
1538
- VpcId : aws .String (vpcID ),
1545
+ HealthCheckEnabled : aws .Bool (true ),
1546
+ HealthCheckPort : aws .String (infrav1 .DefaultAPIServerPortString ),
1547
+ HealthCheckProtocol : aws .String ("tcp" ),
1548
+ UnhealthyThresholdCount : aws .Int64 (infrav1 .DefaultAPIServerUnhealthThresholdCount ),
1549
+ Name : aws .String ("name" ),
1550
+ Port : aws .Int64 (infrav1 .DefaultAPIServerPort ),
1551
+ Protocol : aws .String ("TCP" ),
1552
+ VpcId : aws .String (vpcID ),
1539
1553
Tags : []* elbv2.Tag {
1540
1554
{
1541
1555
Key : aws .String ("test" ),
@@ -1619,13 +1633,14 @@ func TestCreateNLB(t *testing.T) {
1619
1633
},
1620
1634
}, nil )
1621
1635
m .CreateTargetGroup (gomock .Eq (& elbv2.CreateTargetGroupInput {
1622
- HealthCheckEnabled : aws .Bool (true ),
1623
- HealthCheckPort : aws .String ("infrav1.DefaultAPIServerPort" ),
1624
- HealthCheckProtocol : aws .String ("tcp" ),
1625
- Name : aws .String ("name" ),
1626
- Port : aws .Int64 (infrav1 .DefaultAPIServerPort ),
1627
- Protocol : aws .String ("TCP" ),
1628
- VpcId : aws .String (vpcID ),
1636
+ HealthCheckEnabled : aws .Bool (true ),
1637
+ HealthCheckPort : aws .String (infrav1 .DefaultAPIServerPortString ),
1638
+ HealthCheckProtocol : aws .String ("tcp" ),
1639
+ UnhealthyThresholdCount : aws .Int64 (infrav1 .DefaultAPIServerUnhealthThresholdCount ),
1640
+ Name : aws .String ("name" ),
1641
+ Port : aws .Int64 (infrav1 .DefaultAPIServerPort ),
1642
+ Protocol : aws .String ("TCP" ),
1643
+ VpcId : aws .String (vpcID ),
1629
1644
Tags : []* elbv2.Tag {
1630
1645
{
1631
1646
Key : aws .String ("test" ),
@@ -1684,6 +1699,260 @@ func TestCreateNLB(t *testing.T) {
1684
1699
}
1685
1700
},
1686
1701
},
1702
+ {
1703
+ name : "NLB with HTTP health check" ,
1704
+ awsCluster : func (acl infrav1.AWSCluster ) infrav1.AWSCluster {
1705
+ acl .Spec .ControlPlaneLoadBalancer .Scheme = & infrav1 .ELBSchemeInternetFacing
1706
+ acl .Spec .ControlPlaneLoadBalancer .LoadBalancerType = infrav1 .LoadBalancerTypeNLB
1707
+ acl .Spec .ControlPlaneLoadBalancer .HealthCheckProtocol = & infrav1 .ELBProtocolHTTP
1708
+ return acl
1709
+ },
1710
+ spec : func (spec infrav1.LoadBalancer ) infrav1.LoadBalancer {
1711
+ tg := stubInfraV1TargetGroupSpecAPI
1712
+ tg .VpcID = vpcID
1713
+ tg .HealthCheck .Protocol = aws .String ("HTTP" )
1714
+ tg .HealthCheck .Port = aws .String (infrav1 .DefaultAPIServerPortString )
1715
+ tg .HealthCheck .Path = aws .String ("/readyz" )
1716
+ spec .ELBListeners = []infrav1.Listener {
1717
+ {
1718
+ Protocol : "TCP" ,
1719
+ Port : infrav1 .DefaultAPIServerPort ,
1720
+ TargetGroup : tg ,
1721
+ },
1722
+ }
1723
+ return spec
1724
+ },
1725
+ elbV2APIMocks : func (m * mocks.MockELBV2APIMockRecorder ) {
1726
+ m .CreateLoadBalancer (gomock .Eq (& elbv2.CreateLoadBalancerInput {
1727
+ Name : aws .String (elbName ),
1728
+ Scheme : aws .String ("internet-facing" ),
1729
+ SecurityGroups : aws .StringSlice ([]string {}),
1730
+ Type : aws .String ("network" ),
1731
+ Subnets : aws .StringSlice ([]string {clusterSubnetID }),
1732
+ Tags : []* elbv2.Tag {
1733
+ {
1734
+ Key : aws .String ("test" ),
1735
+ Value : aws .String ("tag" ),
1736
+ },
1737
+ },
1738
+ })).Return (& elbv2.CreateLoadBalancerOutput {
1739
+ LoadBalancers : []* elbv2.LoadBalancer {
1740
+ {
1741
+ LoadBalancerArn : aws .String (elbArn ),
1742
+ LoadBalancerName : aws .String (elbName ),
1743
+ Scheme : aws .String (string (infrav1 .ELBSchemeInternetFacing )),
1744
+ DNSName : aws .String (dns ),
1745
+ },
1746
+ },
1747
+ }, nil )
1748
+ m .CreateTargetGroup (gomock .Eq (& elbv2.CreateTargetGroupInput {
1749
+ Name : aws .String ("name" ),
1750
+ Port : aws .Int64 (infrav1 .DefaultAPIServerPort ),
1751
+ Protocol : aws .String ("TCP" ),
1752
+ VpcId : aws .String (vpcID ),
1753
+ HealthCheckEnabled : aws .Bool (true ),
1754
+ HealthCheckPort : aws .String (infrav1 .DefaultAPIServerPortString ),
1755
+ HealthCheckProtocol : aws .String ("HTTP" ),
1756
+ HealthCheckPath : aws .String ("/readyz" ),
1757
+ HealthCheckIntervalSeconds : aws .Int64 (10 ),
1758
+ HealthCheckTimeoutSeconds : aws .Int64 (5 ),
1759
+ HealthyThresholdCount : aws .Int64 (5 ),
1760
+ UnhealthyThresholdCount : aws .Int64 (3 ),
1761
+ Tags : []* elbv2.Tag {
1762
+ {
1763
+ Key : aws .String ("test" ),
1764
+ Value : aws .String ("tag" ),
1765
+ },
1766
+ },
1767
+ })).Return (& elbv2.CreateTargetGroupOutput {
1768
+ TargetGroups : []* elbv2.TargetGroup {
1769
+ {
1770
+ TargetGroupArn : aws .String ("target-group::arn" ),
1771
+ TargetGroupName : aws .String ("name" ),
1772
+ VpcId : aws .String (vpcID ),
1773
+ HealthCheckEnabled : aws .Bool (true ),
1774
+ HealthCheckPort : aws .String (infrav1 .DefaultAPIServerPortString ),
1775
+ HealthCheckProtocol : aws .String ("http" ),
1776
+ HealthCheckPath : aws .String ("/readyz" ),
1777
+ HealthCheckIntervalSeconds : aws .Int64 (10 ),
1778
+ HealthCheckTimeoutSeconds : aws .Int64 (5 ),
1779
+ HealthyThresholdCount : aws .Int64 (5 ),
1780
+ UnhealthyThresholdCount : aws .Int64 (3 ),
1781
+ },
1782
+ },
1783
+ }, nil )
1784
+ m .CreateListener (gomock .Eq (& elbv2.CreateListenerInput {
1785
+ DefaultActions : []* elbv2.Action {
1786
+ {
1787
+ TargetGroupArn : aws .String ("target-group::arn" ),
1788
+ Type : aws .String (elbv2 .ActionTypeEnumForward ),
1789
+ },
1790
+ },
1791
+ LoadBalancerArn : aws .String (elbArn ),
1792
+ Port : aws .Int64 (infrav1 .DefaultAPIServerPort ),
1793
+ Protocol : aws .String ("TCP" ),
1794
+ Tags : []* elbv2.Tag {
1795
+ {
1796
+ Key : aws .String ("test" ),
1797
+ Value : aws .String ("tag" ),
1798
+ },
1799
+ },
1800
+ })).Return (& elbv2.CreateListenerOutput {
1801
+ Listeners : []* elbv2.Listener {
1802
+ {
1803
+ ListenerArn : aws .String ("listener::arn" ),
1804
+ },
1805
+ },
1806
+ }, nil )
1807
+ m .ModifyTargetGroupAttributes (gomock .Eq (& elbv2.ModifyTargetGroupAttributesInput {
1808
+ TargetGroupArn : aws .String ("target-group::arn" ),
1809
+ Attributes : []* elbv2.TargetGroupAttribute {
1810
+ {
1811
+ Key : aws .String (infrav1 .TargetGroupAttributeEnablePreserveClientIP ),
1812
+ Value : aws .String ("false" ),
1813
+ },
1814
+ },
1815
+ })).Return (nil , nil )
1816
+ },
1817
+ check : func (t * testing.T , lb * infrav1.LoadBalancer , err error ) {
1818
+ t .Helper ()
1819
+ if err != nil {
1820
+ t .Fatalf ("did not expect error: %v" , err )
1821
+ }
1822
+ got := * lb .ELBListeners [0 ].TargetGroup .HealthCheck .Protocol
1823
+ want := "HTTP"
1824
+ if got != want {
1825
+ t .Fatalf ("Health Check protocol for the API Target group did not equal expected value: %s; was: '%s'" , want , got )
1826
+ }
1827
+ },
1828
+ },
1829
+ {
1830
+ name : "NLB with HTTPS health check" ,
1831
+ awsCluster : func (acl infrav1.AWSCluster ) infrav1.AWSCluster {
1832
+ acl .Spec .ControlPlaneLoadBalancer .Scheme = & infrav1 .ELBSchemeInternetFacing
1833
+ acl .Spec .ControlPlaneLoadBalancer .LoadBalancerType = infrav1 .LoadBalancerTypeNLB
1834
+ acl .Spec .ControlPlaneLoadBalancer .HealthCheckProtocol = & infrav1 .ELBProtocolHTTPS
1835
+ return acl
1836
+ },
1837
+ spec : func (spec infrav1.LoadBalancer ) infrav1.LoadBalancer {
1838
+ tg := stubInfraV1TargetGroupSpecAPI
1839
+ tg .VpcID = vpcID
1840
+ tg .HealthCheck .Protocol = aws .String ("HTTPS" )
1841
+ tg .HealthCheck .Port = aws .String (infrav1 .DefaultAPIServerPortString )
1842
+ tg .HealthCheck .Path = aws .String ("/readyz" )
1843
+ spec .ELBListeners = []infrav1.Listener {
1844
+ {
1845
+ Protocol : "TCP" ,
1846
+ Port : infrav1 .DefaultAPIServerPort ,
1847
+ TargetGroup : tg ,
1848
+ },
1849
+ }
1850
+ return spec
1851
+ },
1852
+ elbV2APIMocks : func (m * mocks.MockELBV2APIMockRecorder ) {
1853
+ m .CreateLoadBalancer (gomock .Eq (& elbv2.CreateLoadBalancerInput {
1854
+ Name : aws .String (elbName ),
1855
+ Scheme : aws .String ("internet-facing" ),
1856
+ SecurityGroups : aws .StringSlice ([]string {}),
1857
+ Type : aws .String ("network" ),
1858
+ Subnets : aws .StringSlice ([]string {clusterSubnetID }),
1859
+ Tags : []* elbv2.Tag {
1860
+ {
1861
+ Key : aws .String ("test" ),
1862
+ Value : aws .String ("tag" ),
1863
+ },
1864
+ },
1865
+ })).Return (& elbv2.CreateLoadBalancerOutput {
1866
+ LoadBalancers : []* elbv2.LoadBalancer {
1867
+ {
1868
+ LoadBalancerArn : aws .String (elbArn ),
1869
+ LoadBalancerName : aws .String (elbName ),
1870
+ Scheme : aws .String (string (infrav1 .ELBSchemeInternetFacing )),
1871
+ DNSName : aws .String (dns ),
1872
+ },
1873
+ },
1874
+ }, nil )
1875
+ m .CreateTargetGroup (gomock .Eq (& elbv2.CreateTargetGroupInput {
1876
+ Name : aws .String ("name" ),
1877
+ Port : aws .Int64 (infrav1 .DefaultAPIServerPort ),
1878
+ Protocol : aws .String ("TCP" ),
1879
+ VpcId : aws .String (vpcID ),
1880
+ HealthCheckEnabled : aws .Bool (true ),
1881
+ HealthCheckPort : aws .String (infrav1 .DefaultAPIServerPortString ),
1882
+ HealthCheckProtocol : aws .String ("HTTPS" ),
1883
+ HealthCheckPath : aws .String ("/readyz" ),
1884
+ HealthCheckIntervalSeconds : aws .Int64 (10 ),
1885
+ HealthCheckTimeoutSeconds : aws .Int64 (5 ),
1886
+ HealthyThresholdCount : aws .Int64 (5 ),
1887
+ UnhealthyThresholdCount : aws .Int64 (3 ),
1888
+ Tags : []* elbv2.Tag {
1889
+ {
1890
+ Key : aws .String ("test" ),
1891
+ Value : aws .String ("tag" ),
1892
+ },
1893
+ },
1894
+ })).Return (& elbv2.CreateTargetGroupOutput {
1895
+ TargetGroups : []* elbv2.TargetGroup {
1896
+ {
1897
+ TargetGroupArn : aws .String ("target-group::arn" ),
1898
+ TargetGroupName : aws .String ("name" ),
1899
+ VpcId : aws .String (vpcID ),
1900
+ HealthCheckEnabled : aws .Bool (true ),
1901
+ HealthCheckPort : aws .String (infrav1 .DefaultAPIServerPortString ),
1902
+ HealthCheckProtocol : aws .String ("HTTPS" ),
1903
+ HealthCheckPath : aws .String ("/readyz" ),
1904
+ HealthCheckIntervalSeconds : aws .Int64 (10 ),
1905
+ HealthCheckTimeoutSeconds : aws .Int64 (5 ),
1906
+ HealthyThresholdCount : aws .Int64 (5 ),
1907
+ UnhealthyThresholdCount : aws .Int64 (3 ),
1908
+ },
1909
+ },
1910
+ }, nil )
1911
+ m .CreateListener (gomock .Eq (& elbv2.CreateListenerInput {
1912
+ DefaultActions : []* elbv2.Action {
1913
+ {
1914
+ TargetGroupArn : aws .String ("target-group::arn" ),
1915
+ Type : aws .String (elbv2 .ActionTypeEnumForward ),
1916
+ },
1917
+ },
1918
+ LoadBalancerArn : aws .String (elbArn ),
1919
+ Port : aws .Int64 (infrav1 .DefaultAPIServerPort ),
1920
+ Protocol : aws .String ("TCP" ),
1921
+ Tags : []* elbv2.Tag {
1922
+ {
1923
+ Key : aws .String ("test" ),
1924
+ Value : aws .String ("tag" ),
1925
+ },
1926
+ },
1927
+ })).Return (& elbv2.CreateListenerOutput {
1928
+ Listeners : []* elbv2.Listener {
1929
+ {
1930
+ ListenerArn : aws .String ("listener::arn" ),
1931
+ },
1932
+ },
1933
+ }, nil )
1934
+ m .ModifyTargetGroupAttributes (gomock .Eq (& elbv2.ModifyTargetGroupAttributesInput {
1935
+ TargetGroupArn : aws .String ("target-group::arn" ),
1936
+ Attributes : []* elbv2.TargetGroupAttribute {
1937
+ {
1938
+ Key : aws .String (infrav1 .TargetGroupAttributeEnablePreserveClientIP ),
1939
+ Value : aws .String ("false" ),
1940
+ },
1941
+ },
1942
+ })).Return (nil , nil )
1943
+ },
1944
+ check : func (t * testing.T , lb * infrav1.LoadBalancer , err error ) {
1945
+ t .Helper ()
1946
+ if err != nil {
1947
+ t .Fatalf ("did not expect error: %v" , err )
1948
+ }
1949
+ got := * lb .ELBListeners [0 ].TargetGroup .HealthCheck .Protocol
1950
+ want := "HTTPS"
1951
+ if got != want {
1952
+ t .Fatalf ("Health Check protocol for the API Target group did not equal expected value: %s; was: '%s'" , want , got )
1953
+ }
1954
+ },
1955
+ },
1687
1956
}
1688
1957
1689
1958
for _ , tc := range tests {
@@ -1751,7 +2020,7 @@ func TestCreateNLB(t *testing.T) {
1751
2020
VpcID : vpcID ,
1752
2021
HealthCheck : & infrav1.TargetGroupHealthCheck {
1753
2022
Protocol : aws .String ("tcp" ),
1754
- Port : aws .String (" infrav1.DefaultAPIServerPort" ),
2023
+ Port : aws .String (infrav1 .DefaultAPIServerPortString ),
1755
2024
},
1756
2025
},
1757
2026
},
0 commit comments