blob: 55c7fec6414edc29848afa5f534bfe3b80dea35f [file] [log] [blame]
// Copyright Istio Authors
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
package config
import (
"encoding/json"
"fmt"
"strconv"
"strings"
"time"
)
import (
"istio.io/pkg/log"
)
// Command line options
// nolint: maligned
type Config struct {
ProxyPort string `json:"PROXY_PORT"`
InboundCapturePort string `json:"INBOUND_CAPTURE_PORT"`
InboundTunnelPort string `json:"INBOUND_TUNNEL_PORT"`
ProxyUID string `json:"PROXY_UID"`
ProxyGID string `json:"PROXY_GID"`
InboundInterceptionMode string `json:"INBOUND_INTERCEPTION_MODE"`
InboundTProxyMark string `json:"INBOUND_TPROXY_MARK"`
InboundTProxyRouteTable string `json:"INBOUND_TPROXY_ROUTE_TABLE"`
InboundPortsInclude string `json:"INBOUND_PORTS_INCLUDE"`
InboundPortsExclude string `json:"INBOUND_PORTS_EXCLUDE"`
OwnerGroupsInclude string `json:"OUTBOUND_OWNER_GROUPS_INCLUDE"`
OwnerGroupsExclude string `json:"OUTBOUND_OWNER_GROUPS_EXCLUDE"`
OutboundPortsInclude string `json:"OUTBOUND_PORTS_INCLUDE"`
OutboundPortsExclude string `json:"OUTBOUND_PORTS_EXCLUDE"`
OutboundIPRangesInclude string `json:"OUTBOUND_IPRANGES_INCLUDE"`
OutboundIPRangesExclude string `json:"OUTBOUND_IPRANGES_EXCLUDE"`
KubeVirtInterfaces string `json:"KUBE_VIRT_INTERFACES"`
ExcludeInterfaces string `json:"EXCLUDE_INTERFACES"`
IptablesProbePort uint16 `json:"IPTABLES_PROBE_PORT"`
ProbeTimeout time.Duration `json:"PROBE_TIMEOUT"`
DryRun bool `json:"DRY_RUN"`
RestoreFormat bool `json:"RESTORE_FORMAT"`
SkipRuleApply bool `json:"SKIP_RULE_APPLY"`
RunValidation bool `json:"RUN_VALIDATION"`
RedirectDNS bool `json:"REDIRECT_DNS"`
DropInvalid bool `json:"DROP_INVALID"`
CaptureAllDNS bool `json:"CAPTURE_ALL_DNS"`
EnableInboundIPv6 bool `json:"ENABLE_INBOUND_IPV6"`
DNSServersV4 []string `json:"DNS_SERVERS_V4"`
DNSServersV6 []string `json:"DNS_SERVERS_V6"`
OutputPath string `json:"OUTPUT_PATH"`
NetworkNamespace string `json:"NETWORK_NAMESPACE"`
CNIMode bool `json:"CNI_MODE"`
TraceLogging bool `json:"IPTABLES_TRACE_LOGGING"`
}
func (c *Config) String() string {
output, err := json.MarshalIndent(c, "", "\t")
if err != nil {
log.Fatalf("Unable to marshal config object: %v", err)
}
return string(output)
}
func (c *Config) Print() {
var b strings.Builder
b.WriteString(fmt.Sprintf("PROXY_PORT=%s\n", c.ProxyPort))
b.WriteString(fmt.Sprintf("PROXY_INBOUND_CAPTURE_PORT=%s\n", c.InboundCapturePort))
b.WriteString(fmt.Sprintf("PROXY_TUNNEL_PORT=%s\n", c.InboundTunnelPort))
b.WriteString(fmt.Sprintf("PROXY_UID=%s\n", c.ProxyUID))
b.WriteString(fmt.Sprintf("PROXY_GID=%s\n", c.ProxyGID))
b.WriteString(fmt.Sprintf("INBOUND_INTERCEPTION_MODE=%s\n", c.InboundInterceptionMode))
b.WriteString(fmt.Sprintf("INBOUND_TPROXY_MARK=%s\n", c.InboundTProxyMark))
b.WriteString(fmt.Sprintf("INBOUND_TPROXY_ROUTE_TABLE=%s\n", c.InboundTProxyRouteTable))
b.WriteString(fmt.Sprintf("INBOUND_PORTS_INCLUDE=%s\n", c.InboundPortsInclude))
b.WriteString(fmt.Sprintf("INBOUND_PORTS_EXCLUDE=%s\n", c.InboundPortsExclude))
b.WriteString(fmt.Sprintf("OUTBOUND_OWNER_GROUPS_INCLUDE=%s\n", c.OwnerGroupsInclude))
b.WriteString(fmt.Sprintf("OUTBOUND_OWNER_GROUPS_EXCLUDE=%s\n", c.OwnerGroupsExclude))
b.WriteString(fmt.Sprintf("OUTBOUND_IP_RANGES_INCLUDE=%s\n", c.OutboundIPRangesInclude))
b.WriteString(fmt.Sprintf("OUTBOUND_IP_RANGES_EXCLUDE=%s\n", c.OutboundIPRangesExclude))
b.WriteString(fmt.Sprintf("OUTBOUND_PORTS_INCLUDE=%s\n", c.OutboundPortsInclude))
b.WriteString(fmt.Sprintf("OUTBOUND_PORTS_EXCLUDE=%s\n", c.OutboundPortsExclude))
b.WriteString(fmt.Sprintf("KUBE_VIRT_INTERFACES=%s\n", c.KubeVirtInterfaces))
b.WriteString(fmt.Sprintf("ENABLE_INBOUND_IPV6=%t\n", c.EnableInboundIPv6))
b.WriteString(fmt.Sprintf("DNS_CAPTURE=%t\n", c.RedirectDNS))
b.WriteString(fmt.Sprintf("DROP_INVALID=%t\n", c.DropInvalid))
b.WriteString(fmt.Sprintf("CAPTURE_ALL_DNS=%t\n", c.CaptureAllDNS))
b.WriteString(fmt.Sprintf("DNS_SERVERS=%s,%s\n", c.DNSServersV4, c.DNSServersV6))
b.WriteString(fmt.Sprintf("OUTPUT_PATH=%s\n", c.OutputPath))
b.WriteString(fmt.Sprintf("NETWORK_NAMESPACE=%s\n", c.NetworkNamespace))
b.WriteString(fmt.Sprintf("CNI_MODE=%s\n", strconv.FormatBool(c.CNIMode)))
b.WriteString(fmt.Sprintf("EXCLUDE_INTERFACES=%s\n", c.ExcludeInterfaces))
log.Infof("Istio iptables variables:\n%s", b.String())
}
func (c *Config) Validate() error {
return ValidateOwnerGroups(c.OwnerGroupsInclude, c.OwnerGroupsExclude)
}